!Ändringshistorik

;2015-07-04
:[[$:/core/ui/ViewTemplate/title]]
:visar innehållet i fältet "caption" istället för "title"
:visar innehållet i fältet "auktor" i storlek 0.6em genom en span
:[[$:/core/modules/parsers/wikiparser/rules/wikilink.js]]
:raderat fältet "module-type" för att inaktivera CamelCase

;2015-07-18
:$:/core/save/all
:ändrat så TW återgår till ursprungstillståndet vid omladdning

;2015-07-19
:$:/config/SearchResults/Default
:ändrat default söktemplate

;2015-07-20
:$:/core/ui/SideBar/More
:$:/core/ui/SideBar/Open
:$:/core/ui/SideBar/Recent
:$:/core/ui/SideBar/Tools
:tagit bort tag $:/tags/SideBar för att ta bort dem från sidovyn

;2015-08-18
:$:/tags/ViewToolbar
:lagt till $:/_Story/ToolBarCheckbox i ordning i vilken ToolBarButton visas

;2015-09-29
:$:/core/wiki/title
:ändrat för att visa senaste öppnade tiddler i webbläsarens flik
!Mobile/StyleSheet

@media (max-width: 800px) {
}
$(term)$(?i)
\define searchResultList()

<$set name=term value={{$:/temp/search}}>
<$set name=regexp value={{$:/_Sidebar/CustomSearchRegexp}}>
<$set name="resultCount" value="""<$count filter="[!is[system]regexp:caption<regexp>][!is[system]regexp:text<regexp>]"/>""">
{{$:/language/Search/Matches}}
</$set>

//<small>Exact title matches:</small>//

<$list filter="[!is[system]regexp:caption<regexp>][!is[system]regexp:text<regexp>]+[sort[caption]limit[250]]" template="$:/_Sidebar/CustomSearchTemplate"/>

</$set>
\end
<<searchResultList>>
<div class="tc-menu-list-item">
<$link to={{!!title}}>
<$view field="caption"/>
</$link>
</div>
<div class="sidebarList">
  <<list-links filter:"[list[$:/_User/Favorite!!tags]!tag[Config]!tag[User]sort[caption]]">>
</div>
!Sommar
<table class="whitelines">
	<thead>
		<tr>
			<th scope="row"><$button class='tc-btn-invisible'>Art<$action-setfield sort_by='caption'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Temp.<$action-setfield sort_by='summer_temp'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Ljus<$action-setfield sort_by='summer_light'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Vatten<$action-setfield sort_by='summer_water'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Storlek<$action-setfield sort_by='size'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Doft<$action-setfield sort_by='fragrance'/></$button></th>
		</tr>
	</thead>
<$list filter='[list[$:/_User/Favorite!!tags]sort{!!sort_by}]'>
	<tbody>
		<tr>
			<td align="left"><$link to={{!!title}}><$view field="caption"/></$link></td>
			<td>
				<$reveal type="match" state="!!summer_temp" text="warm">[img[iconWarm.svg]]</$reveal>
				<$reveal type="match" state="!!summer_temp" text="intermediate">[img[iconIntermediate.svg]]</$reveal>
				<$reveal type="match" state="!!summer_temp" text="cool">[img[iconCool.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!summer_light" text="bright">[img[iconBright.svg]]</$reveal>
				<$reveal type="match" state="!!summer_light" text="partial_shade">[img[iconPartial_shade.svg]]</$reveal>
				<$reveal type="match" state="!!summer_light" text="shade">[img[iconShade.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!summer_water" text="wet">[img[iconWet.svg]]</$reveal>
				<$reveal type="match" state="!!summer_water" text="moist">[img[iconMoist.svg]]</$reveal>
				<$reveal type="match" state="!!summer_water" text="dry">[img[iconDry.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!size" text="mini">[img[iconMini.svg]]</$reveal>
				<$reveal type="match" state="!!size" text="midi">[img[iconMidi.svg]]</$reveal>
				<$reveal type="match" state="!!size" text="maxi">[img[iconMaxi.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!fragrance" text="fragrant">[img[iconFragrant.svg]]</$reveal>
			</td>
		</tr>
	</tbody>
</$list>
</table>
!Vinter
<table class="whitelines">
	<thead>
		<tr>
			<th scope="row"><$button class='tc-btn-invisible'>Art<$action-setfield sort_by='caption'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Temp.<$action-setfield sort_by='winter_temp'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Ljus<$action-setfield sort_by='winter_light'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Vatten<$action-setfield sort_by='winter_water'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Storlek<$action-setfield sort_by='size'/></$button></th>
			<th scope="col"><$button class='tc-btn-invisible'>Doft<$action-setfield sort_by='fragrance'/></$button></th>
		</tr>
	</thead>
<$list filter='[list[$:/_User/Favorite!!tags]sort{!!sort_by}]'>
	<tbody>
		<tr>
			<td align="left"><$link to={{!!title}}><$view field="caption"/></$link></td>
			<td>
				<$reveal type="match" state="!!winter_temp" text="warm">[img[iconWarm.svg]]</$reveal>
				<$reveal type="match" state="!!winter_temp" text="intermediate">[img[iconIntermediate.svg]]</$reveal>
				<$reveal type="match" state="!!winter_temp" text="cool">[img[iconCool.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!winter_light" text="bright">[img[iconBright.svg]]</$reveal>
				<$reveal type="match" state="!!winter_light" text="partial_shade">[img[iconPartial_shade.svg]]</$reveal>
				<$reveal type="match" state="!!winter_light" text="shade">[img[iconShade.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!winter_water" text="wet">[img[iconWet.svg]]</$reveal>
				<$reveal type="match" state="!!winter_water" text="moist">[img[iconMoist.svg]]</$reveal>
				<$reveal type="match" state="!!winter_water" text="dry">[img[iconDry.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!size" text="mini">[img[iconMini.svg]]</$reveal>
				<$reveal type="match" state="!!size" text="midi">[img[iconMidi.svg]]</$reveal>
				<$reveal type="match" state="!!size" text="maxi">[img[iconMaxi.svg]]</$reveal>
			</td>
			<td>
				<$reveal type="match" state="!!fragrance" text="fragrant">[img[iconFragrant.svg]]</$reveal>
			</td>
		</tr>
	</tbody>
</$list>
</table>
[[Sommaren är kort|$:/_SideBar/Lists/SommarenÄrKort]]

[[Vintern är lång|$:/_SideBar/Lists/VinternÄrLång]]
<div class="sidebarList">
  <<list-links filter:"[[tag[genus]] [tag[species]] +[has[modified]!sort[modified]limit[10]]">>
</div>
/* ONLY WIDE SCREEN
   ================================================== */

@media (min-width: 800px) { 
    /* CONTROL BUTTONS
       ================================================== */

    body.tc-dirty span.tc-dirty-indicator svg,
    .tc-sidebar-scrollable svg {
        fill: transparent
    }

    .tc-btn-boxed {
        border: none
    }

    .tc-sidebar-scrollable:hover svg,
    .tc-sidebar-scrollable svg.tc-image-advanced-search-button {
        fill: #cccccc
    }

    .tc-sidebar-scrollable:hover .tc-btn-boxed {
        border: 1px solid #cccccc
    }

    body.tc-dirty .tc-sidebar-scrollable:hover span.tc-dirty-indicator svg {
        fill: #ff0000
    }

    /* SIDEBAR
       ================================================== */

    .tc-sidebar-scrollable .tc-sidebar-lists .tc-tab-set {
        visibility: hidden
    }

    .tc-sidebar-scrollable:hover .tc-sidebar-lists .tc-tab-set {
        visibility: visible
    }
}

.sidebarList li {
    list-style-type: decimal;
    margin-left: -20px;
}

/* BUTTON ANIMATION
   ================================================== */

.tc-page-controls svg,
.tc-tiddler-controls svg,
.tc-topbar button svg,
.tc-sidebar-scrollable {
    <<transition "fill 50ms ease-in-out">>
}
\define control-panel-button(class)
<$button to="$:/_Story/SystemTabs" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class="""$(tv-config-toolbar-class)$ $class$""">
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/locked-padlock}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>
</$list>
</$button>
\end

<$list filter="[list[$:/StoryList]] +[field:title[$:/ControlPanel]]" emptyMessage=<<control-panel-button>>>
<<control-panel-button "tc-selected">>
</$list>
\define toc-selective-single-expandable(tag,sort:"",itemClassFilter)
<ol class="tc-toc toc-selective-expandable">
<$list filter="[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]">
<$list filter="[all[current]toc-link[no]]" variable="ignore" emptyMessage="<<toc-linked-selective-single-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>">
<<toc-unlinked-selective-single-expandable-body tag:"""$tag$""" sort:"""$sort$""" itemClassFilter:"""$itemClassFilter$""">>
</$list>
</$list>
</ol>
\end

\define toc-linked-selective-single-expandable-body(tag,sort:"",itemClassFilter)
<$set name="toc-state" value=<<qualify "$:/state/toc/$tag$">>>
<$set name="toc-item-class" filter="""$itemClassFilter$""" value="toc-item-selected" emptyValue="toc-item">
<li class=<<toc-item-class>>>
<$link>
<$list filter="[all[current]tagging[]limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
<$reveal type="nomatch" state=<<toc-state>> text=<<currentTiddler>>>
<$button set=<<toc-state>> setTo=<<currentTiddler>> class="tc-btn-invisible">
{{$:/core/images/right-arrow}}
</$button>
</$reveal>
<$reveal type="match" state=<<toc-state>> text=<<currentTiddler>>>
<$button set=<<toc-state>> setTo="x-all-close" class="tc-btn-invisible">
{{$:/core/images/down-arrow}}
</$button>
</$reveal>
</$list>
<<toc-caption>>
</$link>
<$reveal type="match" state=<<toc-state>> text=<<currentTiddler>>>
<$macrocall $name="toc-selective-single-expandable" tag=<<currentTiddler>> sort="""$sort$""" itemClassFilter="""$itemClassFilter$"""/>
</$reveal>
</li>
</$set>
</$set>
\end

\define toc-unlinked-selective-single-expandable-body(tag,sort:"",itemClassFilter)
<$set name="toc-state" value=<<qualify "$:/state/toc/$tag$">>>
<$set name="toc-item-class" filter="""$itemClassFilter$""" value="toc-item-selected" emptyValue="toc-item">
<li class=<<toc-item-class>>>
<$list filter="[all[current]tagging[]limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>">
<$reveal type="nomatch" state=<<toc-state>> text=<<currentTiddler>>>
<$button set=<<toc-state>> setTo=<<currentTiddler>> class="tc-btn-invisible">
{{$:/core/images/right-arrow}}
<<toc-caption>>
</$button>
</$reveal>
<$reveal type="match" state=<<toc-state>> text=<<currentTiddler>>>
<$button set=<<toc-state>> setTo="close" class="tc-btn-invisible">
{{$:/core/images/down-arrow}}
<<toc-caption>>
</$button>
</$reveal>
</$list>
<$reveal type="match" state=<<toc-state>> text=<<currentTiddler>>>
<$macrocall $name="""toc-selective-single-expandable""" tag=<<currentTiddler>> sort="""$sort$""" itemClassFilter="""$itemClassFilter$"""/>
</$reveal>
</li>
</$set>
</$set>
\end
\define TOCPath()
<$list filter="[all[current]tags[]![prefix[$:/tags]limit[1]]">
   <<TOCPath>> <$view field="title"/> /
</$list>
\end
<$list filter="[is[current]tag[genus]]">
  <<TOCPath>> <$view field="caption"/>
</$list>
<div class="tc-table-of-contents">
<<toc-selective-single-expandable "Orchidaceae" "sort[title]sort[caption]">>
</div>
<$list filter="[is[current]tag[species]]">
<div class=".text-block small-column">
   <table class="no-border" style="width:100%;">
      <tr>
         <th colspan="3" style="text-align:center;">
            <h1>Odling</h1>
         </th>
      </tr>
      <tr>
         <th>Tillväxtperiod</th>
         <th></th>
         <th>Viloperiod</th>
      </tr>
      <tr>
         <th colspan="3" style="text-align:center;">Temperatur</th>
      </tr>
      <tr>
         <td>
            <$select field='summer_temp'>
            <option value=''></option>
            <option value='warm'>varmt</option>
            <option value='intermediate'>intermediärt</option>
            <option value='cool'>svalt</option>
            </$select>
         </td>
         <td>''varmt'', behaglig inomhustemperatur dagtid 20 grader eller högre, nattemperatur inte under 16 grader<br />
            ''intermediärt'', inomhustemperatur dagtid 16 grader eller högre, nattemperatur mellan tio och 16 grader<br />
            ''svalt'', inomhustemperatur dagtid 13 grader eller högre, nattemperatur mellan fyra och tio grader
         </td>
         <td>
            <$select field='winter_temp'>
            <option value=''></option>
            <option value='warm'>varmt</option>
            <option value='intermediate'>intermediärt</option>
            <option value='cool'>svalt</option>
            </$select>
         </td>
      </tr>
      <tr>
         <th colspan="3" style="text-align:center;">Ljus</th>
      </tr>
      <tr>
         <td>
            <$select field='summer_light'>
            <option value=''></option>
            <option value='bright'>starkt</option>
            <option value='partial_shade'>medel</option>
            <option value='shade'>svagt</option>
            </$select>
         </td>
         <td>''starkt'', >32 000 lux, skarp skugga från 15 cm höjd<br />
            ''medel'', 21 000 till 32 000 lux, mjuk skugga från 15 cm höjd<br />
            ''svagt'', 13 000 till 21 000 lux, ger ingen eller nästan ingen skugga från 15 cm höjd
         </td>
         <td>
            <$select field='winter_light'>
            <option value=''></option>
            <option value='bright'>starkt</option>
            <option value='partial_shade'>medel</option>
            <option value='shade'>svagt</option>
            </$select>
         </td>
      </tr>
      <tr>
         <th colspan="3" style="text-align:center;">Vattning</th>
      </tr>
      <tr>
         <td>
            <$select field='summer_water'>
            <option value=''></option>
            <option value='wet'>vått</option>
            <option value='moist'>fuktigt</option>
            <option value='dry'>torrt</option>
            </$select>
         </td>
         <td>''vått'', vattning tre till fem gånger i veckan<br />
            ''fuktigt'', vattning två gånger i veckan<br />
            ''torrt'', vattning en gång i veckan eller mindre
         </td>
         <td>
            <$select field='winter_water'>
            <option value=''></option>
            <option value='wet'>vått</option>
            <option value='moist'>fuktigt</option>
            <option value='dry'>torrt</option>
            </$select>
         </td>
      </tr>
   </table>
   <table class="no-border" style="width:100%;">
      <tr>
         <th colspan="2" style="text-align:center;">
            <h1>Habitat</h1>
         </th>
      </tr>
      <tr>
         <th style="text-align:center;width:50%;">Tropisk zon (höjd över havet i meter)</th>
         <th style="text-align:center;">Kontinent</th>
      </tr>
      <tr>
         <td><$checkbox field="subalpine" checked="true" unchecked="false" default="false"> ''subalpin zon'', mer än 2440 m</$checkbox></td>
         <td><$checkbox field="africa" checked="true" unchecked="false" default="false">Afrika</$checkbox></td>
      </tr>
      <tr>
         <td><$checkbox field="temperate" checked="true" unchecked="false" default="false"> ''tempererad zon'', 1830 till 2440 m</$checkbox></td>
         <td><$checkbox field="europe" checked="true" unchecked="false" default="false">Europa</$checkbox></td>
      </tr>
      <tr>
         <td><$checkbox field="subtropical" checked="true" unchecked="false" default="false"> ''subtropisk zon'', 915 till 1830 m</$checkbox></td>
         <td><$checkbox field="asia" checked="true" unchecked="false" default="false">Asien</$checkbox></td>
      </tr>
      <tr>
         <td><$checkbox field="tropical" checked="true" unchecked="false" default="false"> ''tropisk zon'', lägre än 915 m</$checkbox></td>
         <td><$checkbox field="australia" checked="true" unchecked="false" default="false">Australien</$checkbox></td>
      </tr>
      <tr>
         <td></td>
         <td><$checkbox field="north_america" checked="true" unchecked="false" default="false">Nordamerika</$checkbox></td>
      </tr>
      <tr>
         <td></td>
         <td><$checkbox field="south_america" checked="true" unchecked="false" default="false">Sydamerika</$checkbox></td>
      </tr>
   </table>
   <table class="no-border" style="width:100%;">
      <tr>
         <th colspan="5" style="text-align:center;">
            <h1>Egenskaper</h1>
         </th>
      </tr>
      <tr>
         <th style="text-align:center;">Blomning</th>
         <th style="text-align:center;">Blomningsperiod</th>
         <th colspan="2" style="text-align:center;">Storlek</th>
         <th style="text-align:center;">Doft</th>
      </tr>
      <tr>
         <td rowspan="4">
            <$select field='flowering'>
            <option value=''></option>
            <option value='less'>mindre än 2 veckor</option>
            <option value='four_weeks'>mellan två och fyra veckor</option>
            <option value='six_weeks'>mellan fyra och sex veckor</option>
            <option value='more'>mer än sex veckor</option>
            </$select>
         </td>
         <td>
            <$checkbox field="flowering_spring" checked="true" unchecked="false" default="false">vår</$checkbox>
         </td>
         <td rowspan="4">
            <$select field='size'>
            <option value=''></option>
            <option value='maxi'>stor</option>
            <option value='midi'>medel</option>
            <option value='mini'>liten</option>
            </$select>
         </td>
         <td rowspan="4">
            ''stor'', mer än 46 cm<br />
            ''medel'', mellan 25 och 43 cm<br />
            ''liten'', mindre än 25 cm
         </td>
         <td rowspan="4">
            <$select field='fragrance'>
            <option value=''></option>
            <option value='fragrant'>doftande</option>
            <option value='non_fragrant'>inte doftande</option>
            </$select>
         </td>
      </tr>
      <tr>
         <td><$checkbox field="flowering_summer" checked="true" unchecked="false" default="false">sommar</$checkbox></td>
      </tr>
      <tr>
         <td><$checkbox field="flowering_autumn" checked="true" unchecked="false" default="false">höst</$checkbox></td>
      </tr>
      <tr>
         <td><$checkbox field="flowering_winter" checked="true" unchecked="false" default="false">vinter</$checkbox></td>
      </tr>
   </table>
</div>
</$list>
\define dropbox(folder,file)
<img src="https://dl.dropboxusercontent.com/u/955759/$folder$/$file$.jpg" />
\end

<$list filter="[is[current]tag[species]]">
  <div class="bigger_image">
    <$macrocall $name="dropbox" folder="Orchidelirium" file={{!!title}}/>
  </div>
</$list>
.tc-tagged-genus .tc-tiddler-body,
.tc-tagged-species .tc-tiddler-body {
    display: block;
    column-width: 300px;
    -moz-column-width: 300px;
    -webkit-column-width: 300px;
}

.tc-tagged-genus .tc-tiddler-body p,
.tc-tagged-species .tc-tiddler-body p {
    white-space: pre-line
}

.tc-tagged-genus .tc-tag-list-item,
.tc-tagged-species .tc-tag-list-item {
    display: none
}

.tc-tagged-windowLess .tc-title,
.tc-tagged-windowLess .tc-subtitle,
.tc-tagged-windowLess .tc-tag-list-item {
    display: none
}

.storyList {
    display: block;
    column-width: 240px;
    -moz-column-width: 240px;
    -webkit-column-width: 240px;
    white-space: pre-line;
    line-height: 70%;
}

tc-tagged-System .tc-title,
.tc-tagged-System .tc-tag-list-item {
    display: none
}

.text-block {
    display: inline-block
}

.ToolBarCheckBox {
    font-size: 24px;
    position: relative;
    top: 4px;
    margin-left: -10px;
}

.ToolBarCheckBox input[type="checkbox"] {
    position: relative;
    right: -32px;
}

/* TABLES WHITELINES
   ================================================== */

html body.tc-body .whitelines {
    background:white;
    border-collapse: collapse;
    border-color:white;
    min-width:80px;
    text-align: center;
}

html body.tc-body .whitelines th {
    background-color:white;
    border-color:white;
    border-bottom: 2px solid #446699;
    color: #446699;
    padding:10px;
}

html body.tc-body .whitelines td {
    background:white;
    border-color:white;
    border-bottom: 1px solid #ccc;color: #000;
    padding: 6px 8px;
}

.whitelines img {
    height: 30px;
}

/* FOCUS
   ================================================== */

/* TIDDLER TOOLBAR
   ================================================== */

.tc-tiddler-view-frame .tc-tiddler-controls svg {
    fill: transparent
}

.tc-tiddler-view-frame .tc-tiddler-controls:hover svg,
.tc-tiddler-view-frame .tc-tiddler-controls [aria-label~=close] svg,
.tc-tiddler-view-frame .tc-tiddler-controls .tc-popup svg {
    fill: #cccccc
}

.tc-tiddler-view-frame .tc-tiddler-controls:hover .tc-btn-boxed {
    border: 1px solid #cccccc
}

/* ONLY WIDE SCREEN
   ================================================== */

@media (max-width: 800px) { 
    /* FIX TIDDLER WIDTH
       ================================================== */

    .tc-storyview-zoomin-tiddler {
        width: 100% !important
    }
}

/* IMAGES
   ================================================== */

.mini_image img {
    height: 30px;
}

.small_image img {
    height: 80px;
    padding: 10px;
    align: top;
}

.big_image img {
    height: 100px;
    padding: 0 10px;
}

.bigger_image {
  position: relative;
  width: 400px;
  margin-left: 20px;
  float: right;
}

.bigger_image img {
  padding: 10px;
  border: solid 1px #D8D8D8;
  -webkit-box-shadow: 20px 20px 20px #999999;
     -moz-box-shadow: 20px 20px 20px #999999;
          box-shadow: 20px 20px 20px #999999;
}
<<tabs "[[$:/core/ui/SideBar/More]] [[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]]">>
<$list filter="[is[current]tag[species]]">
<$checkbox tiddler="$:/_User/Favorite" tag={{!!title}} class="ToolBarCheckBox">{{iconHeart.svg}}</$checkbox>
</$list>
<$list filter="[is[current]tag[genus]]">
<<tabs "[[$:/_Story/ViewTemplate/Genus/List]] [[x]]">>
</$list>
<div class="storyList">
  <$list filter="[tag{!!caption}sort[caption]] -[tag[genus]]">
    <$link to={{!!title}}><$view field="caption"/></$link>
  </$list>
</div>
<$list filter="[is[current]tag[species]]">
<<tabs "[[$:/_Story/ViewTemplate/Species/Info]] [[$:/_Story/ViewTemplate/Species/Notes]] [[x]]">>
</$list>
<div class="species-footer">
  <div class="text-block small_image">
    <h1>Tillväxtperiod</h1>
      <$reveal type="match" state="!!summer_temp" text="warm">[img[iconWarm.svg]]</$reveal>
      <$reveal type="match" state="!!summer_temp" text="intermediate">[img[iconIntermediate.svg]]</$reveal>
      <$reveal type="match" state="!!summer_temp" text="cool">[img[iconCool.svg]]</$reveal>
      <$reveal type="match" state="!!summer_light" text="bright">[img[iconBright.svg]]</$reveal>
      <$reveal type="match" state="!!summer_light" text="partial_shade">[img[iconPartial_shade.svg]]</$reveal>
      <$reveal type="match" state="!!summer_light" text="shade">[img[iconShade.svg]]</$reveal>
      <$reveal type="match" state="!!summer_water" text="wet">[img[iconWet.svg]]</$reveal>
      <$reveal type="match" state="!!summer_water" text="moist">[img[iconMoist.svg]]</$reveal>
      <$reveal type="match" state="!!summer_water" text="dry">[img[iconDry.svg]]</$reveal>
  </div>
  <div class="text-block small_image">
    <h1>Viloperiod</h1>
      <$reveal type="match" state="!!winter_temp" text="warm">[img[iconWarm.svg]]</$reveal>
      <$reveal type="match" state="!!winter_temp" text="intermediate">[img[iconIntermediate.svg]]</$reveal>
      <$reveal type="match" state="!!winter_temp" text="cool">[img[iconCool.svg]]</$reveal>
      <$reveal type="match" state="!!winter_light" text="bright">[img[iconBright.svg]]</$reveal>
      <$reveal type="match" state="!!winter_light" text="partial_shade">[img[iconPartial_shade.svg]]</$reveal>
      <$reveal type="match" state="!!winter_light" text="shade">[img[iconShade.svg]]</$reveal>
      <$reveal type="match" state="!!winter_water" text="wet">[img[iconWet.svg]]</$reveal>
      <$reveal type="match" state="!!winter_water" text="moist">[img[iconMoist.svg]]</$reveal>
      <$reveal type="match" state="!!winter_water" text="dry">[img[iconDry.svg]]</$reveal>
  </div>
  <div class="text-block big_image">
    <h1>Kontinent</h1>
      <$reveal type="match" state="!!australia" text="true">[img[iconWorldMap.svg]]</$reveal>
      <$reveal type="match" state="!!asia" text="true">[img[iconWorldMap.svg]]</$reveal>
      <$reveal type="match" state="!!africa" text="true">[img[iconWorldMap.svg]]</$reveal>
      <$reveal type="match" state="!!north_america" text="true">[img[iconWorldMap.svg]]</$reveal>
      <$reveal type="match" state="!!south_america" text="true">[img[iconWorldMap.svg]]</$reveal>
  </div>
  <div class="text-block small_image">
    <h1>Altitud</h1>
      <$reveal type="match" state="!!tropical" text="true">[img[iconTropical.svg]]</$reveal>
      <$reveal type="match" state="!!subtropical" text="true">[img[iconSubtropical.svg]]</$reveal>
      <$reveal type="match" state="!!temperate" text="true">[img[iconTemperate.svg]]</$reveal>
      <$reveal type="match" state="!!subalpine" text="true">[img[iconSubalpine.svg]]</$reveal>
  </div>
  <div class="text-block small_image">
    <h1>Egenskaper</h1>
      <$reveal type="match" state="!!size" text="maxi">[img[iconMaxi.svg]]</$reveal>
      <$reveal type="match" state="!!size" text="midi">[img[iconMidi.svg]]</$reveal>
      <$reveal type="match" state="!!size" text="mini">[img[iconMini.svg]]</$reveal>
      <$reveal type="match" state="!!fragrance" text="fragrant">[img[iconFragrant.svg]]</$reveal>
  </div>
</div>
<$list filter="[is[current]tag[species]]">
                    <$edit-text tiddler="$:/_User/Notes" field={{!!title}} tag="textarea" class="tc-edit-texteditor"  />
</$list>


$:/_Sidebar/TableOfContents
top
permalink
yes
$:/_Sidebar/CustomSearchResults
{
    "tiddlers": {
        "$:/Acknowledgements": {
            "title": "$:/Acknowledgements",
            "type": "text/vnd.tiddlywiki",
            "text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
        },
        "$:/core/copyright.txt": {
            "title": "$:/core/copyright.txt",
            "type": "text/plain",
            "text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright © Jeremy Ruston 2004-2007\nCopyright © UnaMesa Association 2007-2016\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of the UnaMesa Association nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n"
        },
        "$:/core/icon": {
            "title": "$:/core/icon",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/advanced-search-button": {
            "title": "$:/core/images/advanced-search-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-advanced-search-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M74.5651535,87.9848361 C66.9581537,93.0488876 57.8237115,96 48,96 C21.490332,96 0,74.509668 0,48 C0,21.490332 21.490332,0 48,0 C74.509668,0 96,21.490332 96,48 C96,57.8541369 93.0305793,67.0147285 87.9377231,74.6357895 L122.284919,108.982985 C125.978897,112.676963 125.973757,118.65366 122.284271,122.343146 C118.593975,126.033442 112.613238,126.032921 108.92411,122.343793 L74.5651535,87.9848361 Z M48,80 C65.673112,80 80,65.673112 80,48 C80,30.326888 65.673112,16 48,16 C30.326888,16 16,30.326888 16,48 C16,65.673112 30.326888,80 48,80 Z\"></path>\n        <circle cx=\"48\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"28\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"68\" cy=\"48\" r=\"8\"></circle>\n    </g>\n</svg>"
        },
        "$:/core/images/blank": {
            "title": "$:/core/images/blank",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"></svg>"
        },
        "$:/core/images/cancel-button": {
            "title": "$:/core/images/cancel-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n\t<g fill-rule=\"evenodd\">\n\t    <path d=\"M64,76.3137085 L47.0294734,93.2842351 C43.9038742,96.4098343 38.8399231,96.4084656 35.7157288,93.2842712 C32.5978915,90.166434 32.5915506,85.0947409 35.7157649,81.9705266 L52.6862915,65 L35.7157649,48.0294734 C32.5901657,44.9038742 32.5915344,39.8399231 35.7157288,36.7157288 C38.833566,33.5978915 43.9052591,33.5915506 47.0294734,36.7157649 L64,53.6862915 L80.9705266,36.7157649 C84.0961258,33.5901657 89.1600769,33.5915344 92.2842712,36.7157288 C95.4021085,39.833566 95.4084494,44.9052591 92.2842351,48.0294734 L75.3137085,65 L92.2842351,81.9705266 C95.4098343,85.0961258 95.4084656,90.1600769 92.2842712,93.2842712 C89.166434,96.4021085 84.0947409,96.4084494 80.9705266,93.2842351 L64,76.3137085 Z M64,129 C99.346224,129 128,100.346224 128,65 C128,29.653776 99.346224,1 64,1 C28.653776,1 1.13686838e-13,29.653776 1.13686838e-13,65 C1.13686838e-13,100.346224 28.653776,129 64,129 Z M64,113 C90.509668,113 112,91.509668 112,65 C112,38.490332 90.509668,17 64,17 C37.490332,17 16,38.490332 16,65 C16,91.509668 37.490332,113 64,113 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-down": {
            "title": "$:/core/images/chevron-down",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-down tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 40.500000) rotate(-270.000000) translate(-64.000000, -40.500000) translate(-22.500000, -26.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/chevron-left": {
            "title": "$:/core/images/chevron-left",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" version=\"1.1\">\n    <g fill-rule=\"evenodd\" transform=\"translate(92.500000, 64.000000) rotate(-180.000000) translate(-92.500000, -64.000000) translate(6.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-right": {
            "title": "$:/core/images/chevron-right",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-right tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-48.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-up": {
            "title": "$:/core/images/chevron-up",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-up tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 89.500000) rotate(-90.000000) translate(-64.000000, -89.500000) translate(-22.500000, 22.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/clone-button": {
            "title": "$:/core/images/clone-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-clone-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z\"></path>\n        <path d=\"M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-all-button": {
            "title": "$:/core/images/close-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-close-all-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-23.000000, -23.000000)\">\n        <path d=\"M43,131 L22.9976794,131 C18.5827987,131 15,127.418278 15,123 C15,118.590712 18.5806831,115 22.9976794,115 L43,115 L43,94.9976794 C43,90.5827987 46.581722,87 51,87 C55.4092877,87 59,90.5806831 59,94.9976794 L59,115 L79.0023206,115 C83.4172013,115 87,118.581722 87,123 C87,127.409288 83.4193169,131 79.0023206,131 L59,131 L59,151.002321 C59,155.417201 55.418278,159 51,159 C46.5907123,159 43,155.419317 43,151.002321 L43,131 Z\" transform=\"translate(51.000000, 123.000000) rotate(-45.000000) translate(-51.000000, -123.000000) \"></path>\n        <path d=\"M43,59 L22.9976794,59 C18.5827987,59 15,55.418278 15,51 C15,46.5907123 18.5806831,43 22.9976794,43 L43,43 L43,22.9976794 C43,18.5827987 46.581722,15 51,15 C55.4092877,15 59,18.5806831 59,22.9976794 L59,43 L79.0023206,43 C83.4172013,43 87,46.581722 87,51 C87,55.4092877 83.4193169,59 79.0023206,59 L59,59 L59,79.0023206 C59,83.4172013 55.418278,87 51,87 C46.5907123,87 43,83.4193169 43,79.0023206 L43,59 Z\" transform=\"translate(51.000000, 51.000000) rotate(-45.000000) translate(-51.000000, -51.000000) \"></path>\n        <path d=\"M115,59 L94.9976794,59 C90.5827987,59 87,55.418278 87,51 C87,46.5907123 90.5806831,43 94.9976794,43 L115,43 L115,22.9976794 C115,18.5827987 118.581722,15 123,15 C127.409288,15 131,18.5806831 131,22.9976794 L131,43 L151.002321,43 C155.417201,43 159,46.581722 159,51 C159,55.4092877 155.419317,59 151.002321,59 L131,59 L131,79.0023206 C131,83.4172013 127.418278,87 123,87 C118.590712,87 115,83.4193169 115,79.0023206 L115,59 Z\" transform=\"translate(123.000000, 51.000000) rotate(-45.000000) translate(-123.000000, -51.000000) \"></path>\n        <path d=\"M115,131 L94.9976794,131 C90.5827987,131 87,127.418278 87,123 C87,118.590712 90.5806831,115 94.9976794,115 L115,115 L115,94.9976794 C115,90.5827987 118.581722,87 123,87 C127.409288,87 131,90.5806831 131,94.9976794 L131,115 L151.002321,115 C155.417201,115 159,118.581722 159,123 C159,127.409288 155.419317,131 151.002321,131 L131,131 L131,151.002321 C131,155.417201 127.418278,159 123,159 C118.590712,159 115,155.419317 115,151.002321 L115,131 Z\" transform=\"translate(123.000000, 123.000000) rotate(-45.000000) translate(-123.000000, -123.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-button": {
            "title": "$:/core/images/close-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M65.0864256,75.4091629 L14.9727349,125.522854 C11.8515951,128.643993 6.78104858,128.64922 3.65685425,125.525026 C0.539017023,122.407189 0.5336324,117.334539 3.65902635,114.209145 L53.7727171,64.0954544 L3.65902635,13.9817637 C0.537886594,10.8606239 0.532659916,5.79007744 3.65685425,2.6658831 C6.77469148,-0.451954124 11.8473409,-0.457338747 14.9727349,2.66805521 L65.0864256,52.7817459 L115.200116,2.66805521 C118.321256,-0.453084553 123.391803,-0.458311231 126.515997,2.6658831 C129.633834,5.78372033 129.639219,10.8563698 126.513825,13.9817637 L76.4001341,64.0954544 L126.513825,114.209145 C129.634965,117.330285 129.640191,122.400831 126.515997,125.525026 C123.39816,128.642863 118.32551,128.648248 115.200116,125.522854 L65.0864256,75.4091629 L65.0864256,75.4091629 Z\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/close-others-button": {
            "title": "$:/core/images/close-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-others-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/delete-button": {
            "title": "$:/core/images/delete-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\" transform=\"translate(12.000000, 0.000000)\">\n        <rect x=\"0\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"28\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"56\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/done-button": {
            "title": "$:/core/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z\" id=\"Rectangle-285\" transform=\"translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/down-arrow": {
            "title": "$:/core/images/down-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <path d=\"M109.35638,81.3533152 C107.923899,82.7869182 105.94502,83.6751442 103.759224,83.6751442 L24.5910645,83.6751442 C20.225873,83.6751442 16.6751442,80.1307318 16.6751442,75.7584775 C16.6751442,71.3951199 20.2192225,67.8418109 24.5910645,67.8418109 L95.8418109,67.8418109 L95.8418109,-3.40893546 C95.8418109,-7.77412698 99.3862233,-11.3248558 103.758478,-11.3248558 C108.121835,-11.3248558 111.675144,-7.78077754 111.675144,-3.40893546 L111.675144,75.7592239 C111.675144,77.9416955 110.789142,79.9205745 109.356651,81.3538862 Z\" transform=\"translate(64.175144, 36.175144) rotate(45.000000) translate(-64.175144, -36.175144) \"></path>\n</svg>"
        },
        "$:/core/images/download-button": {
            "title": "$:/core/images/download-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-download-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path class=\"tc-image-download-button-ring\" d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"/><path d=\"M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z\"/></g></svg>"
        },
        "$:/core/images/edit-button": {
            "title": "$:/core/images/edit-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M116.870058,45.3431458 L108.870058,45.3431458 L108.870058,45.3431458 L108.870058,61.3431458 L116.870058,61.3431458 L116.870058,45.3431458 Z M124.870058,45.3431458 L127.649881,45.3431458 C132.066101,45.3431458 135.656854,48.9248678 135.656854,53.3431458 C135.656854,57.7524334 132.07201,61.3431458 127.649881,61.3431458 L124.870058,61.3431458 L124.870058,45.3431458 Z M100.870058,45.3431458 L15.6638275,45.3431458 C15.5064377,45.3431458 15.3501085,45.3476943 15.1949638,45.3566664 L15.1949638,45.3566664 C15.0628002,45.3477039 14.928279,45.3431458 14.7913977,45.3431458 C6.68160973,45.3431458 -8.34314575,53.3431458 -8.34314575,53.3431458 C-8.34314575,53.3431458 6.85614548,61.3431458 14.7913977,61.3431458 C14.9266533,61.3431458 15.0596543,61.3384973 15.190398,61.3293588 C15.3470529,61.3385075 15.5049057,61.3431458 15.6638275,61.3431458 L100.870058,61.3431458 L100.870058,45.3431458 L100.870058,45.3431458 Z\" transform=\"translate(63.656854, 53.343146) rotate(-45.000000) translate(-63.656854, -53.343146) \"></path>\n        <path d=\"M35.1714596,124.189544 C41.9594858,123.613403 49.068777,121.917633 58.85987,118.842282 C60.6854386,118.268877 62.4306907,117.705515 65.1957709,116.802278 C81.1962861,111.575575 87.0734839,109.994907 93.9414474,109.655721 C102.29855,109.242993 107.795169,111.785371 111.520478,118.355045 C112.610163,120.276732 115.051363,120.951203 116.97305,119.861518 C118.894737,118.771832 119.569207,116.330633 118.479522,114.408946 C113.146151,105.003414 104.734907,101.112919 93.5468356,101.66546 C85.6716631,102.054388 79.4899908,103.716944 62.7116783,109.197722 C59.9734132,110.092199 58.2519873,110.64787 56.4625698,111.20992 C37.002649,117.322218 25.6914684,118.282267 16.8654804,112.957098 C14.9739614,111.815848 12.5154166,112.424061 11.3741667,114.31558 C10.2329168,116.207099 10.84113,118.665644 12.7326489,119.806894 C19.0655164,123.627836 26.4866335,124.926678 35.1714596,124.189544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/export-button": {
            "title": "$:/core/images/export-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-export-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00348646,127.999999 C8.00464867,128 8.00581094,128 8.00697327,128 L119.993027,128 C122.205254,128 124.207939,127.101378 125.657096,125.651198 L125.656838,125.65759 C127.104563,124.210109 128,122.21009 128,119.999949 L128,56.0000511 C128,51.5817449 124.409288,48 120,48 C115.581722,48 112,51.5797863 112,56.0000511 L112,112 L16,112 L16,56.0000511 C16,51.5817449 12.4092877,48 8,48 C3.581722,48 7.10542736e-15,51.5797863 7.10542736e-15,56.0000511 L7.10542736e-15,119.999949 C7.10542736e-15,124.418255 3.59071231,128 8,128 C8.00116233,128 8.0023246,128 8.00348681,127.999999 Z M56.6235633,27.3113724 L47.6580188,36.2769169 C44.5333664,39.4015692 39.4634864,39.4061295 36.339292,36.2819351 C33.2214548,33.1640979 33.2173444,28.0901742 36.3443103,24.9632084 L58.9616908,2.34582788 C60.5248533,0.782665335 62.5748436,0.000361191261 64.624516,2.38225238e-14 L64.6193616,0.00151809229 C66.6695374,0.000796251595 68.7211167,0.781508799 70.2854358,2.34582788 L92.9028163,24.9632084 C96.0274686,28.0878607 96.0320289,33.1577408 92.9078345,36.2819351 C89.7899973,39.3997724 84.7160736,39.4038827 81.5891078,36.2769169 L72.6235633,27.3113724 L72.6235633,88.5669606 C72.6235633,92.9781015 69.0418413,96.5662064 64.6235633,96.5662064 C60.2142756,96.5662064 56.6235633,92.984822 56.6235633,88.5669606 L56.6235633,27.3113724 L56.6235633,27.3113724 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/file": {
            "title": "$:/core/images/file",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-file tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M111.96811,30.5 L112,30.5 L112,119.999079 C112,124.417866 108.419113,128 104.000754,128 L23.9992458,128 C19.5813843,128 16,124.417687 16,119.999079 L16,8.00092105 C16,3.58213437 19.5808867,0 23.9992458,0 L81,0 L81,0.0201838424 C83.1589869,-0.071534047 85.3482153,0.707077645 86.9982489,2.35711116 L109.625176,24.9840387 C111.151676,26.510538 111.932942,28.4998414 111.96811,30.5 L111.96811,30.5 Z M81,8 L24,8 L24,120 L104,120 L104,30.5 L89.0003461,30.5 C84.5818769,30.5 81,26.9216269 81,22.4996539 L81,8 Z\"></path>\n        <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"68\" width=\"64\" height=\"8\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"84\" width=\"64\" height=\"8\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"100\" width=\"64\" height=\"8\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"8\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-all-button": {
            "title": "$:/core/images/fold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M64.0292774,58.6235628 C61.9791013,58.6242848 59.9275217,57.8435723 58.3632024,56.279253 L35.7458219,33.6618725 C32.6211696,30.5372202 32.6166093,25.4673401 35.7408036,22.3431458 C38.8586409,19.2253085 43.9325646,19.2211982 47.0595304,22.348164 L64.0250749,39.3137085 L80.9906194,22.348164 C84.1152717,19.2235117 89.1851518,19.2189514 92.3093461,22.3431458 C95.4271834,25.460983 95.4312937,30.5349067 92.3043279,33.6618725 L69.6869474,56.279253 C68.1237851,57.8424153 66.0737951,58.6247195 64.0241231,58.6250809 Z\" transform=\"translate(64.024316, 39.313708) scale(1, -1) translate(-64.024316, -39.313708) \"></path>\n        <path d=\"M64.0292774,123.621227 C61.9791013,123.621949 59.9275217,122.841236 58.3632024,121.276917 L35.7458219,98.6595365 C32.6211696,95.5348842 32.6166093,90.4650041 35.7408036,87.3408098 C38.8586409,84.2229725 43.9325646,84.2188622 47.0595304,87.345828 L64.0250749,104.311373 L80.9906194,87.345828 C84.1152717,84.2211757 89.1851518,84.2166154 92.3093461,87.3408098 C95.4271834,90.458647 95.4312937,95.5325707 92.3043279,98.6595365 L69.6869474,121.276917 C68.1237851,122.840079 66.0737951,123.622383 64.0241231,123.622745 Z\" transform=\"translate(64.024316, 104.311372) scale(1, -1) translate(-64.024316, -104.311372) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-button": {
            "title": "$:/core/images/fold-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M64.0292774,63.6235628 C61.9791013,63.6242848 59.9275217,62.8435723 58.3632024,61.279253 L35.7458219,38.6618725 C32.6211696,35.5372202 32.6166093,30.4673401 35.7408036,27.3431458 C38.8586409,24.2253085 43.9325646,24.2211982 47.0595304,27.348164 L64.0250749,44.3137085 L80.9906194,27.348164 C84.1152717,24.2235117 89.1851518,24.2189514 92.3093461,27.3431458 C95.4271834,30.460983 95.4312937,35.5349067 92.3043279,38.6618725 L69.6869474,61.279253 C68.1237851,62.8424153 66.0737951,63.6247195 64.0241231,63.6250809 Z\" transform=\"translate(64.024316, 44.313708) scale(1, -1) translate(-64.024316, -44.313708) \"></path>\n        <path d=\"M64.0049614,105.998482 C61.9547853,105.999204 59.9032057,105.218491 58.3388864,103.654172 L35.7215059,81.0367916 C32.5968535,77.9121393 32.5922933,72.8422592 35.7164876,69.7180649 C38.8343248,66.6002276 43.9082485,66.5961173 47.0352144,69.7230831 L64.0007589,86.6886276 L80.9663034,69.7230831 C84.0909557,66.5984308 89.1608358,66.5938705 92.2850301,69.7180649 C95.4028673,72.8359021 95.4069777,77.9098258 92.2800119,81.0367916 L69.6626314,103.654172 C68.099469,105.217334 66.0494791,105.999639 63.999807,106 Z\" transform=\"translate(64.000000, 86.688628) scale(1, -1) translate(-64.000000, -86.688628) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-others-button": {
            "title": "$:/core/images/fold-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold-others tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"56.0314331\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M101.657101,104.948818 C100.207918,103.498614 98.2051847,102.599976 95.9929031,102.599976 L72,102.599976 L72,78.6070725 C72,76.3964271 71.1036108,74.3936927 69.6545293,72.9441002 L69.6571005,72.9488183 C68.2079177,71.4986143 66.2051847,70.5999756 63.9929031,70.5999756 L32.0070969,70.5999756 C27.5881712,70.5999756 24,74.1816976 24,78.5999756 C24,83.0092633 27.5848994,86.5999756 32.0070969,86.5999756 L56,86.5999756 L56,110.592879 C56,112.803524 56.8963895,114.806259 58.3454713,116.255852 L58.3429,116.251133 C59.7920828,117.701337 61.7948156,118.599976 64.0070969,118.599976 L88,118.599976 L88,142.592879 C88,147.011804 91.581722,150.599976 96,150.599976 C100.409288,150.599976 104,147.015076 104,142.592879 L104,110.607072 C104,108.396427 103.103611,106.393693 101.654529,104.9441 Z\" transform=\"translate(64.000000, 110.599976) rotate(-45.000000) translate(-64.000000, -110.599976) \"></path>\n        <path d=\"M101.725643,11.7488671 C100.27646,10.2986632 98.2737272,9.40002441 96.0614456,9.40002441 L72.0685425,9.40002441 L72.0685425,-14.5928787 C72.0685425,-16.8035241 71.1721533,-18.8062584 69.7230718,-20.255851 L69.725643,-20.2511329 C68.2764602,-21.7013368 66.2737272,-22.5999756 64.0614456,-22.5999756 L32.0756394,-22.5999756 C27.6567137,-22.5999756 24.0685425,-19.0182536 24.0685425,-14.5999756 C24.0685425,-10.1906879 27.6534419,-6.59997559 32.0756394,-6.59997559 L56.0685425,-6.59997559 L56.0685425,17.3929275 C56.0685425,19.6035732 56.964932,21.6063078 58.4140138,23.0559004 L58.4114425,23.0511823 C59.8606253,24.5013859 61.8633581,25.4000244 64.0756394,25.4000244 L88.0685425,25.4000244 L88.0685425,49.3929275 C88.0685425,53.8118532 91.6502645,57.4000244 96.0685425,57.4000244 C100.47783,57.4000244 104.068542,53.815125 104.068542,49.3929275 L104.068542,17.4071213 C104.068542,15.1964759 103.172153,13.1937416 101.723072,11.744149 Z\" transform=\"translate(64.068542, 17.400024) scale(1, -1) rotate(-45.000000) translate(-64.068542, -17.400024) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/folder": {
            "title": "$:/core/images/folder",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-folder tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.6943257,128.000004 L7.99859666,128.000004 C3.5810937,128.000004 0,124.413822 0,119.996384 L0,48.0036243 C0,43.5833471 3.58387508,40.0000044 7.99859666,40.0000044 L16,40.0000044 L16,31.9999914 C16,27.5817181 19.5783731,24 24.0003461,24 L55.9996539,24 C60.4181231,24 64,27.5800761 64,31.9999914 L64,40.0000044 L104.001403,40.0000044 C108.418906,40.0000044 112,43.5861868 112,48.0036243 L112,59.8298353 L104,59.7475921 L104,51.9994189 C104,49.7887607 102.207895,48.0000044 99.9972215,48.0000044 L56,48.0000044 L56,36.0000255 C56,33.7898932 54.2072328,32 51.9957423,32 L28.0042577,32 C25.7890275,32 24,33.7908724 24,36.0000255 L24,48.0000044 L12.0027785,48.0000044 C9.78987688,48.0000044 8,49.7906032 8,51.9994189 L8,116.00059 C8,118.211248 9.79210499,120.000004 12.0027785,120.000004 L58.7630167,120.000004 L55.6943257,128.000004 L55.6943257,128.000004 Z\"></path>\n        <path d=\"M23.8728955,55.5 L119.875702,55.5 C124.293205,55.5 126.87957,59.5532655 125.650111,64.5630007 L112.305967,118.936999 C111.077582,123.942356 106.497904,128 102.083183,128 L6.08037597,128 C1.66287302,128 -0.923492342,123.946735 0.305967145,118.936999 L13.650111,64.5630007 C14.878496,59.5576436 19.4581739,55.5 23.8728955,55.5 L23.8728955,55.5 L23.8728955,55.5 Z M25.6530124,64 L113.647455,64 C115.858129,64 117.151473,66.0930612 116.538306,68.6662267 L105.417772,115.333773 C104.803671,117.910859 102.515967,120 100.303066,120 L12.3086228,120 C10.0979492,120 8.8046054,117.906939 9.41777189,115.333773 L20.5383062,68.6662267 C21.1524069,66.0891409 23.4401107,64 25.6530124,64 L25.6530124,64 L25.6530124,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/full-screen-button": {
            "title": "$:/core/images/full-screen-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-full-screen-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g>\n        <g>\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/github": {
            "title": "$:/core/images/github",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-github tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n        <g fill-rule=\"evenodd\">\n            <path d=\"M63.9383506,1.60695328 C28.6017227,1.60695328 -0.055756057,30.2970814 -0.055756057,65.6906208 C-0.055756057,94.003092 18.2804728,118.019715 43.7123154,126.493393 C46.9143781,127.083482 48.0812647,125.104717 48.0812647,123.405261 C48.0812647,121.886765 48.02626,117.85449 47.9948287,112.508284 C30.1929317,116.379268 26.4368926,103.916587 26.4368926,103.916587 C23.5255693,96.5129372 19.3294921,94.5420399 19.3294921,94.5420399 C13.5186324,90.5687739 19.7695302,90.6474524 19.7695302,90.6474524 C26.1933001,91.099854 29.5721638,97.2525155 29.5721638,97.2525155 C35.2808718,107.044059 44.5531024,104.215566 48.1991321,102.575118 C48.7806109,98.4366275 50.4346826,95.612068 52.2616263,94.0109598 C38.0507543,92.3941159 23.1091047,86.8944862 23.1091047,62.3389152 C23.1091047,55.3443933 25.6039634,49.6205298 29.6978889,45.1437211 C29.0378318,43.5229433 26.8415704,37.0044266 30.3265147,28.1845627 C30.3265147,28.1845627 35.6973364,26.4615028 47.9241083,34.7542205 C53.027764,33.330139 58.5046663,32.6220321 63.9462084,32.5944947 C69.3838216,32.6220321 74.856795,33.330139 79.9683085,34.7542205 C92.1872225,26.4615028 97.5501864,28.1845627 97.5501864,28.1845627 C101.042989,37.0044266 98.8467271,43.5229433 98.190599,45.1437211 C102.292382,49.6205298 104.767596,55.3443933 104.767596,62.3389152 C104.767596,86.9574291 89.8023734,92.3744463 75.5482834,93.9598188 C77.8427675,95.9385839 79.8897303,99.8489072 79.8897303,105.828476 C79.8897303,114.392635 79.8111521,121.304544 79.8111521,123.405261 C79.8111521,125.120453 80.966252,127.114954 84.2115327,126.489459 C109.623731,117.996111 127.944244,93.9952241 127.944244,65.6906208 C127.944244,30.2970814 99.2867652,1.60695328 63.9383506,1.60695328\"></path>\n        </g>\n    </svg>\n"
        },
        "$:/core/images/globe": {
            "title": "$:/core/images/globe",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-globe tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079\"></path>\n        <path d=\"M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z\"></path>\n        <path d=\"M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/help": {
            "title": "$:/core/images/help",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-help tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M36.0548906,111.44117 C30.8157418,115.837088 20.8865444,118.803477 9.5,118.803477 C7.86465619,118.803477 6.25937294,118.742289 4.69372699,118.624467 C12.612543,115.984876 18.7559465,110.02454 21.0611049,102.609942 C8.74739781,92.845129 1.04940554,78.9359851 1.04940554,63.5 C1.04940554,33.9527659 29.2554663,10 64.0494055,10 C98.8433448,10 127.049406,33.9527659 127.049406,63.5 C127.049406,93.0472341 98.8433448,117 64.0494055,117 C53.9936953,117 44.48824,114.999337 36.0548906,111.44117 L36.0548906,111.44117 Z M71.4042554,77.5980086 C71.406883,77.2865764 71.4095079,76.9382011 71.4119569,76.5610548 C71.4199751,75.3262169 71.4242825,74.0811293 71.422912,72.9158546 C71.4215244,71.736154 71.4143321,70.709635 71.4001396,69.8743525 C71.4078362,68.5173028 71.9951951,67.7870427 75.1273009,65.6385471 C75.2388969,65.5619968 76.2124091,64.8981068 76.5126553,64.6910879 C79.6062455,62.5580654 81.5345849,60.9050204 83.2750652,58.5038955 C85.6146327,55.2762841 86.8327108,51.426982 86.8327108,46.8554323 C86.8327108,33.5625756 76.972994,24.9029551 65.3778484,24.9029551 C54.2752771,24.9029551 42.8794554,34.5115163 41.3121702,47.1975534 C40.9043016,50.4989536 43.2499725,53.50591 46.5513726,53.9137786 C49.8527728,54.3216471 52.8597292,51.9759763 53.2675978,48.6745761 C54.0739246,42.1479456 60.2395837,36.9492759 65.3778484,36.9492759 C70.6427674,36.9492759 74.78639,40.5885487 74.78639,46.8554323 C74.78639,50.4892974 73.6853224,52.008304 69.6746221,54.7736715 C69.4052605,54.9593956 68.448509,55.6118556 68.3131127,55.7047319 C65.6309785,57.5445655 64.0858213,58.803255 62.6123358,60.6352315 C60.5044618,63.2559399 59.3714208,66.3518252 59.3547527,69.9487679 C59.3684999,70.8407274 59.3752803,71.8084521 59.3765995,72.9300232 C59.3779294,74.0607297 59.3737237,75.2764258 59.36589,76.482835 C59.3634936,76.8518793 59.3609272,77.1924914 59.3583633,77.4963784 C59.3568319,77.6778944 59.3556368,77.8074256 59.3549845,77.8730928 C59.3219814,81.1994287 61.9917551,83.9227111 65.318091,83.9557142 C68.644427,83.9887173 71.3677093,81.3189435 71.4007124,77.9926076 C71.4014444,77.9187458 71.402672,77.7856841 71.4042554,77.5980086 Z M65.3778489,102.097045 C69.5359735,102.097045 72.9067994,98.7262189 72.9067994,94.5680944 C72.9067994,90.4099698 69.5359735,87.0391439 65.3778489,87.0391439 C61.2197243,87.0391439 57.8488984,90.4099698 57.8488984,94.5680944 C57.8488984,98.7262189 61.2197243,102.097045 65.3778489,102.097045 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/home-button": {
            "title": "$:/core/images/home-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112.9847,119.501583 C112.99485,119.336814 113,119.170705 113,119.003406 L113,67.56802 C116.137461,70.5156358 121.076014,70.4518569 124.133985,67.3938855 C127.25818,64.2696912 127.260618,59.2068102 124.131541,56.0777326 L70.3963143,2.34250601 C68.8331348,0.779326498 66.7828947,-0.000743167069 64.7337457,1.61675364e-05 C62.691312,-0.00409949529 60.6426632,0.777559815 59.077717,2.34250601 L33,28.420223 L33,28.420223 L33,8.00697327 C33,3.58484404 29.4092877,0 25,0 C20.581722,0 17,3.59075293 17,8.00697327 L17,44.420223 L5.3424904,56.0777326 C2.21694607,59.2032769 2.22220878,64.2760483 5.34004601,67.3938855 C8.46424034,70.5180798 13.5271213,70.5205187 16.6561989,67.3914411 L17,67.04764 L17,119.993027 C17,119.994189 17.0000002,119.995351 17.0000007,119.996514 C17.0000002,119.997675 17,119.998838 17,120 C17,124.418278 20.5881049,128 24.9992458,128 L105.000754,128 C109.418616,128 113,124.409288 113,120 C113,119.832611 112.99485,119.666422 112.9847,119.501583 Z M97,112 L97,51.5736087 L97,51.5736087 L64.7370156,19.3106244 L33,51.04764 L33,112 L97,112 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/import-button": {
            "title": "$:/core/images/import-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-import-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z\" transform=\"translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/info-button": {
            "title": "$:/core/images/info-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <g transform=\"translate(0.049406, 0.000000)\">\n            <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"></path>\n            <circle cx=\"64\" cy=\"32\" r=\"8\"></circle>\n            <rect x=\"56\" y=\"48\" width=\"16\" height=\"56\" rx=\"8\"></rect>\n        </g>\n    </g>\n    </g>\n</svg>"
        },
        "$:/core/images/left-arrow": {
            "created": "20150315234410875",
            "modified": "20150315235324760",
            "tags": "$:/tags/Image",
            "title": "$:/core/images/left-arrow",
            "text": "<svg class=\"tc-image-left-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path transform=\"rotate(135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25075c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056z\"/>\n</svg>\n"
        },
        "$:/core/images/locked-padlock": {
            "title": "$:/core/images/locked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-locked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/mail": {
            "title": "$:/core/images/mail",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mail tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M122.826782,104.894066 C121.945525,105.22777 120.990324,105.41043 119.993027,105.41043 L8.00697327,105.41043 C7.19458381,105.41043 6.41045219,105.289614 5.67161357,105.064967 L5.67161357,105.064967 L39.8346483,70.9019325 L60.6765759,91.7438601 C61.6118278,92.679112 62.8865166,93.0560851 64.0946097,92.8783815 C65.2975108,93.0473238 66.5641085,92.6696979 67.4899463,91.7438601 L88.5941459,70.6396605 C88.6693095,70.7292352 88.7490098,70.8162939 88.8332479,70.9005321 L122.826782,104.894066 Z M127.903244,98.6568194 C127.966933,98.2506602 128,97.8343714 128,97.4103789 L128,33.410481 C128,32.7414504 127.917877,32.0916738 127.763157,31.4706493 L94.2292399,65.0045665 C94.3188145,65.0797417 94.4058701,65.1594458 94.4901021,65.2436778 L127.903244,98.6568194 Z M0.205060636,99.2178117 C0.0709009529,98.6370366 0,98.0320192 0,97.4103789 L0,33.410481 C0,32.694007 0.0944223363,31.9995312 0.27147538,31.3387595 L0.27147538,31.3387595 L34.1777941,65.2450783 L0.205060636,99.2178117 L0.205060636,99.2178117 Z M5.92934613,25.6829218 C6.59211333,25.5051988 7.28862283,25.4104299 8.00697327,25.4104299 L119.993027,25.4104299 C120.759109,25.4104299 121.500064,25.5178649 122.201605,25.7184927 L122.201605,25.7184927 L64.0832611,83.8368368 L5.92934613,25.6829218 L5.92934613,25.6829218 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/menu-button": {
            "title": "$:/core/images/menu-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <rect x=\"0\" y=\"16\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"56\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"96\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n</svg>"
        },
        "$:/core/images/new-button": {
            "title": "$:/core/images/new-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M56,72 L8.00697327,72 C3.59075293,72 0,68.418278 0,64 C0,59.5907123 3.58484404,56 8.00697327,56 L56,56 L56,8.00697327 C56,3.59075293 59.581722,0 64,0 C68.4092877,0 72,3.58484404 72,8.00697327 L72,56 L119.993027,56 C124.409247,56 128,59.581722 128,64 C128,68.4092877 124.415156,72 119.993027,72 L72,72 L72,119.993027 C72,124.409247 68.418278,128 64,128 C59.5907123,128 56,124.415156 56,119.993027 L56,72 L56,72 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-here-button": {
            "title": "$:/core/images/new-here-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-here-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n    \t<g transform=\"translate(52.233611, 64.389922) rotate(75.000000) translate(-52.233611, -64.389922) translate(-7.734417, 3.702450)\">\n\t        <path d=\"M18.9270186,45.959338 L18.9080585,49.6521741 C18.8884833,53.4648378 21.0574548,58.7482162 23.7526408,61.4434022 L78.5671839,116.257945 C81.2617332,118.952495 85.6348701,118.950391 88.3334363,116.251825 L115.863237,88.7220241 C118.555265,86.0299959 118.564544,81.6509578 115.869358,78.9557717 L61.0548144,24.1412286 C58.3602652,21.4466794 53.0787224,19.2788426 49.2595808,19.3006519 L25.9781737,19.4336012 C22.1633003,19.4553862 19.0471195,22.5673232 19.0275223,26.3842526 L18.9871663,34.2443819 C19.0818862,34.255617 19.1779758,34.2665345 19.2754441,34.2771502 C22.6891275,34.6489512 27.0485594,34.2348566 31.513244,33.2285542 C31.7789418,32.8671684 32.075337,32.5211298 32.4024112,32.1940556 C34.8567584,29.7397084 38.3789778,29.0128681 41.4406288,30.0213822 C41.5958829,29.9543375 41.7503946,29.8866669 41.9041198,29.8183808 L42.1110981,30.2733467 C43.1114373,30.6972371 44.0473796,31.3160521 44.8614145,32.1300869 C48.2842088,35.5528813 48.2555691,41.130967 44.7974459,44.5890903 C41.4339531,47.952583 36.0649346,48.0717177 32.6241879,44.9262969 C27.8170558,45.8919233 23.0726921,46.2881596 18.9270186,45.959338 Z\"></path>\n\t        <path d=\"M45.4903462,38.8768094 C36.7300141,42.6833154 26.099618,44.7997354 18.1909048,43.9383587 C7.2512621,42.7468685 1.50150083,35.8404432 4.66865776,24.7010202 C7.51507386,14.6896965 15.4908218,6.92103848 24.3842626,4.38423012 C34.1310219,1.60401701 42.4070208,6.15882777 42.4070209,16.3101169 L34.5379395,16.310117 C34.5379394,11.9285862 31.728784,10.3825286 26.5666962,11.8549876 C20.2597508,13.6540114 14.3453742,19.4148216 12.2444303,26.8041943 C10.4963869,32.9523565 12.6250796,35.5092726 19.0530263,36.2093718 C25.5557042,36.9176104 35.0513021,34.9907189 42.7038419,31.5913902 L42.7421786,31.6756595 C44.3874154,31.5384763 47.8846101,37.3706354 45.9274416,38.6772897 L45.9302799,38.6835285 C45.9166992,38.6895612 45.9031139,38.6955897 45.8895238,38.7016142 C45.8389288,38.7327898 45.7849056,38.7611034 45.7273406,38.7863919 C45.6506459,38.8200841 45.571574,38.8501593 45.4903462,38.8768094 Z\"></path>\n        </g>\n        <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n    </g>\n    </g>\n</svg>"
        },
        "$:/core/images/new-journal-button": {
            "title": "$:/core/images/new-journal-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-journal-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M102.545455,112.818182 L102.545455,124.636364 L102.545455,124.636364 L102.545455,124.636364 C102.545455,125.941761 103.630828,127 104.969697,127 L111.030303,127 C112.369172,127 113.454545,125.941761 113.454545,124.636364 L113.454545,112.818182 L125.575758,112.818182 C126.914626,112.818182 128,111.759982 128,110.454545 L128,104.545455 C128,103.240018 126.914626,102.181818 125.575758,102.181818 L113.454545,102.181818 L113.454545,90.3636364 C113.454545,89.0582 112.369172,88 111.030303,88 L104.969697,88 L104.969697,88 C103.630828,88 102.545455,89.0582 102.545455,90.3636364 L102.545455,102.181818 L90.4242424,102.181818 L90.4242424,102.181818 C89.0853705,102.181818 88,103.240018 88,104.545455 L88,110.454545 L88,110.454545 L88,110.454545 C88,111.759982 89.0853705,112.818182 90.4242424,112.818182 L102.545455,112.818182 Z\"></path>\n        <g transform=\"translate(59.816987, 64.316987) rotate(30.000000) translate(-59.816987, -64.316987) translate(20.316987, 12.816987)\">\n            <g transform=\"translate(0.000000, 0.000000)\">\n                <path d=\"M9.99631148,0 C4.4755011,0 -2.27373675e-13,4.48070044 -2.27373675e-13,9.99759461 L-2.27373675e-13,91.6128884 C-2.27373675e-13,97.1344074 4.46966773,101.610483 9.99631148,101.610483 L68.9318917,101.610483 C74.4527021,101.610483 78.9282032,97.1297826 78.9282032,91.6128884 L78.9282032,9.99759461 C78.9282032,4.47607557 74.4585355,0 68.9318917,0 L9.99631148,0 Z M20.8885263,26 C24.2022348,26 26.8885263,23.3137085 26.8885263,20 C26.8885263,16.6862915 24.2022348,14 20.8885263,14 C17.5748178,14 14.8885263,16.6862915 14.8885263,20 C14.8885263,23.3137085 17.5748178,26 20.8885263,26 Z M57.3033321,25.6783342 C60.6170406,25.6783342 63.3033321,22.9920427 63.3033321,19.6783342 C63.3033321,16.3646258 60.6170406,13.6783342 57.3033321,13.6783342 C53.9896236,13.6783342 51.3033321,16.3646258 51.3033321,19.6783342 C51.3033321,22.9920427 53.9896236,25.6783342 57.3033321,25.6783342 Z\"></path>\n                <text font-family=\"Helvetica\" font-size=\"47.1724138\" font-weight=\"bold\" fill=\"#FFFFFF\">\n                    <tspan x=\"42\" y=\"77.4847912\" text-anchor=\"middle\"><<now \"DD\">></tspan>\n                </text>\n            </g>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/open-window": {
            "title": "$:/core/images/open-window",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-open-window tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M16,112 L104.993898,112 C108.863261,112 112,115.590712 112,120 C112,124.418278 108.858091,128 104.993898,128 L7.00610161,128 C3.13673853,128 0,124.409288 0,120 C0,119.998364 4.30952878e-07,119.996727 1.29273572e-06,119.995091 C4.89579306e-07,119.993456 0,119.99182 0,119.990183 L0,24.0098166 C0,19.586117 3.59071231,16 8,16 C12.418278,16 16,19.5838751 16,24.0098166 L16,112 Z\"></path>\n        <path d=\"M96,43.1959595 L96,56 C96,60.418278 99.581722,64 104,64 C108.418278,64 112,60.418278 112,56 L112,24 C112,19.5907123 108.415101,16 103.992903,16 L72.0070969,16 C67.5881712,16 64,19.581722 64,24 C64,28.4092877 67.5848994,32 72.0070969,32 L84.5685425,32 L48.2698369,68.2987056 C45.1421332,71.4264093 45.1434327,76.4904296 48.267627,79.614624 C51.3854642,82.7324612 56.4581306,82.7378289 59.5835454,79.6124141 L96,43.1959595 Z M32,7.9992458 C32,3.58138434 35.5881049,0 39.9992458,0 L120.000754,0 C124.418616,0 128,3.5881049 128,7.9992458 L128,88.0007542 C128,92.4186157 124.411895,96 120.000754,96 L39.9992458,96 C35.5813843,96 32,92.4118951 32,88.0007542 L32,7.9992458 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/options-button": {
            "title": "$:/core/images/options-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-options-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M110.48779,76.0002544 C109.354214,80.4045063 107.611262,84.5641217 105.354171,88.3838625 L105.354171,88.3838625 L112.07833,95.1080219 C115.20107,98.2307613 115.210098,103.299824 112.089164,106.420759 L106.420504,112.089418 C103.301049,115.208874 98.2346851,115.205502 95.1077675,112.078585 L88.3836082,105.354425 C84.5638673,107.611516 80.4042519,109.354468 76,110.488045 L76,110.488045 L76,119.993281 C76,124.409501 72.4220153,128.000254 68.0083475,128.000254 L59.9916525,128.000254 C55.5800761,128.000254 52,124.41541 52,119.993281 L52,110.488045 C47.5957481,109.354468 43.4361327,107.611516 39.6163918,105.354425 L32.8922325,112.078585 C29.7694931,115.201324 24.7004301,115.210353 21.5794957,112.089418 L15.9108363,106.420759 C12.7913807,103.301303 12.7947522,98.2349395 15.9216697,95.1080219 L22.6458291,88.3838625 C20.3887383,84.5641217 18.6457859,80.4045063 17.5122098,76.0002544 L8.00697327,76.0002544 C3.59075293,76.0002544 2.19088375e-16,72.4222697 4.89347582e-16,68.0086019 L9.80228577e-16,59.9919069 C1.25035972e-15,55.5803305 3.58484404,52.0002544 8.00697327,52.0002544 L17.5122098,52.0002544 C18.6457859,47.5960025 20.3887383,43.4363871 22.6458291,39.6166462 L15.9216697,32.8924868 C12.7989304,29.7697475 12.7899019,24.7006845 15.9108363,21.5797501 L21.5794957,15.9110907 C24.6989513,12.7916351 29.7653149,12.7950065 32.8922325,15.9219241 L39.6163918,22.6460835 C43.4361327,20.3889927 47.5957481,18.6460403 52,17.5124642 L52,8.00722764 C52,3.5910073 55.5779847,0.000254375069 59.9916525,0.000254375069 L68.0083475,0.000254375069 C72.4199239,0.000254375069 76,3.58509841 76,8.00722764 L76,17.5124642 C80.4042519,18.6460403 84.5638673,20.3889927 88.3836082,22.6460835 L95.1077675,15.9219241 C98.2305069,12.7991848 103.29957,12.7901562 106.420504,15.9110907 L112.089164,21.5797501 C115.208619,24.6992057 115.205248,29.7655693 112.07833,32.8924868 L105.354171,39.6166462 L105.354171,39.6166462 C107.611262,43.4363871 109.354214,47.5960025 110.48779,52.0002544 L119.993027,52.0002544 C124.409247,52.0002544 128,55.5782391 128,59.9919069 L128,68.0086019 C128,72.4201783 124.415156,76.0002544 119.993027,76.0002544 L110.48779,76.0002544 L110.48779,76.0002544 Z M64,96.0002544 C81.673112,96.0002544 96,81.6733664 96,64.0002544 C96,46.3271424 81.673112,32.0002544 64,32.0002544 C46.326888,32.0002544 32,46.3271424 32,64.0002544 C32,81.6733664 46.326888,96.0002544 64,96.0002544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/palette": {
            "title": "$:/core/images/palette",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-palette tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.2470434,39.1821571 C75.0645698,38.2680897 69.6261555,37.7814854 64.0193999,37.7814854 C28.6624616,37.7814854 0,57.1324214 0,81.0030106 C0,90.644534 4.67604329,99.5487133 12.5805659,106.738252 C23.5031767,91.1899067 26.3405471,72.3946229 36.8885698,63.5622337 C52.0716764,50.8486559 63.4268694,55.7343343 63.4268694,55.7343343 L80.2470434,39.1821571 Z M106.781666,48.8370714 C119.830962,56.749628 128.0388,68.229191 128.0388,81.0030106 C128.0388,90.3534932 128.557501,98.4142085 116.165191,106.082518 C105.367708,112.763955 112.341384,99.546808 104.321443,95.1851533 C96.3015017,90.8234987 84.3749007,96.492742 86.1084305,103.091059 C89.3087234,115.272303 105.529892,114.54645 92.4224435,119.748569 C79.3149955,124.950687 74.2201582,124.224536 64.0193999,124.224536 C56.1979176,124.224536 48.7040365,123.277578 41.7755684,121.544216 C51.620343,117.347916 69.6563669,109.006202 75.129737,102.088562 C82.7876655,92.4099199 87.3713218,80.0000002 83.3235694,72.4837191 C83.1303943,72.1250117 94.5392656,60.81569 106.781666,48.8370714 Z M1.13430476,123.866563 C0.914084026,123.867944 0.693884185,123.868637 0.473712455,123.868637 C33.9526848,108.928928 22.6351223,59.642592 59.2924543,59.6425917 C59.6085574,61.0606542 59.9358353,62.5865065 60.3541977,64.1372318 C34.4465025,59.9707319 36.7873124,112.168427 1.13429588,123.866563 L1.13430476,123.866563 Z M1.84669213,123.859694 C40.7185279,123.354338 79.9985412,101.513051 79.9985401,79.0466836 C70.7284906,79.0466835 65.9257264,75.5670082 63.1833375,71.1051511 C46.585768,64.1019718 32.81846,116.819636 1.84665952,123.859695 L1.84669213,123.859694 Z M67.1980193,59.8524981 C62.748213,63.9666823 72.0838429,76.2846822 78.5155805,71.1700593 C89.8331416,59.8524993 112.468264,37.2173758 123.785825,25.8998146 C135.103386,14.5822535 123.785825,3.26469247 112.468264,14.5822535 C101.150703,25.8998144 78.9500931,48.9868127 67.1980193,59.8524981 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permalink-button": {
            "title": "$:/core/images/permalink-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permalink-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.4834582,48 L73.0956761,80 L73.0956761,80 L47.5165418,80 L54.9043239,48 L80.4834582,48 Z M84.1773493,32 L89.8007299,7.64246248 C90.7941633,3.33942958 95.0918297,0.64641956 99.3968675,1.64031585 C103.693145,2.63218977 106.385414,6.93288901 105.390651,11.2416793 L100.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L96.9043239,48 L89.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L85.8226507,96 L80.1992701,120.357538 C79.2058367,124.66057 74.9081703,127.35358 70.6031325,126.359684 C66.3068546,125.36781 63.6145865,121.067111 64.6093491,116.758321 L69.401785,96 L43.8226507,96 L38.1992701,120.357538 C37.2058367,124.66057 32.9081703,127.35358 28.6031325,126.359684 C24.3068546,125.36781 21.6145865,121.067111 22.6093491,116.758321 L27.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L31.0956761,80 L38.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L42.1773493,32 L47.8007299,7.64246248 C48.7941633,3.33942958 53.0918297,0.64641956 57.3968675,1.64031585 C61.6931454,2.63218977 64.3854135,6.93288901 63.3906509,11.2416793 L58.598215,32 L84.1773493,32 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permaview-button": {
            "title": "$:/core/images/permaview-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permaview-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M81.4834582,48 L79.6365127,56 L79.6365127,56 L74.0573784,56 L75.9043239,48 L81.4834582,48 Z M85.1773493,32 L90.8007299,7.64246248 C91.7941633,3.33942958 96.0918297,0.64641956 100.396867,1.64031585 C104.693145,2.63218977 107.385414,6.93288901 106.390651,11.2416793 L101.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L97.9043239,48 L96.0573784,56 L104.000754,56 C108.411895,56 112,59.581722 112,64 C112,68.4092877 108.418616,72 104.000754,72 L92.3634873,72 L90.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L86.8226507,96 L81.1992701,120.357538 C80.2058367,124.66057 75.9081703,127.35358 71.6031325,126.359684 C67.3068546,125.36781 64.6145865,121.067111 65.6093491,116.758321 L70.401785,96 L64.8226507,96 L59.1992701,120.357538 C58.2058367,124.66057 53.9081703,127.35358 49.6031325,126.359684 C45.3068546,125.36781 42.6145865,121.067111 43.6093491,116.758321 L48.401785,96 L42.8226507,96 L37.1992701,120.357538 C36.2058367,124.66057 31.9081703,127.35358 27.6031325,126.359684 C23.3068546,125.36781 20.6145865,121.067111 21.6093491,116.758321 L26.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L30.0956761,80 L31.9426216,72 L23.9992458,72 C19.5881049,72 16,68.418278 16,64 C16,59.5907123 19.5813843,56 23.9992458,56 L35.6365127,56 L37.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L41.1773493,32 L46.8007299,7.64246248 C47.7941633,3.33942958 52.0918297,0.64641956 56.3968675,1.64031585 C60.6931454,2.63218977 63.3854135,6.93288901 62.3906509,11.2416793 L57.598215,32 L63.1773493,32 L68.8007299,7.64246248 C69.7941633,3.33942958 74.0918297,0.64641956 78.3968675,1.64031585 C82.6931454,2.63218977 85.3854135,6.93288901 84.3906509,11.2416793 L79.598215,32 L85.1773493,32 Z M53.9043239,48 L52.0573784,56 L57.6365127,56 L59.4834582,48 L53.9043239,48 Z M75.9426216,72 L74.0956761,80 L74.0956761,80 L68.5165418,80 L70.3634873,72 L75.9426216,72 L75.9426216,72 Z M48.3634873,72 L46.5165418,80 L52.0956761,80 L53.9426216,72 L48.3634873,72 L48.3634873,72 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-language": {
            "title": "$:/core/images/plugin-generic-language",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-plugin": {
            "title": "$:/core/images/plugin-generic-plugin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-theme": {
            "title": "$:/core/images/plugin-generic-theme",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M29.4078519,91.4716406 L51.4693474,69.4101451 L51.4646675,69.4054652 C50.5969502,68.5377479 50.5929779,67.1348725 51.4693474,66.2585029 C52.3396494,65.3882009 53.7499654,65.3874786 54.6163097,66.2538229 L64.0805963,75.7181095 C64.9483136,76.5858268 64.9522859,77.9887022 64.0759163,78.8650718 C63.2056143,79.7353737 61.7952984,79.736096 60.9289541,78.8697517 L60.9242741,78.8650718 L60.9242741,78.8650718 L38.8627786,100.926567 C36.2518727,103.537473 32.0187578,103.537473 29.4078519,100.926567 C26.796946,98.3156614 26.796946,94.0825465 29.4078519,91.4716406 Z M60.8017407,66.3810363 C58.3659178,63.6765806 56.3370667,61.2899536 54.9851735,59.5123615 C48.1295381,50.4979488 44.671561,55.2444054 40.7586738,59.5123614 C36.8457866,63.7803174 41.789473,67.2384487 38.0759896,70.2532832 C34.3625062,73.2681177 34.5917646,74.3131575 28.3243876,68.7977024 C22.0570105,63.2822473 21.6235306,61.7636888 24.5005999,58.6166112 C27.3776691,55.4695337 29.7823103,60.4247912 35.6595047,54.8320442 C41.5366991,49.2392972 36.5996215,44.2825646 36.5996215,44.2825646 C36.5996215,44.2825646 48.8365511,19.267683 65.1880231,21.1152173 C81.5394952,22.9627517 59.0022276,18.7228947 53.3962199,38.3410355 C50.9960082,46.7405407 53.8429162,44.7613399 58.3941742,48.3090467 C59.7875202,49.3951602 64.4244828,52.7100463 70.1884353,56.9943417 L90.8648751,36.3179019 L92.4795866,31.5515482 L100.319802,26.8629752 L103.471444,30.0146174 L98.782871,37.8548326 L94.0165173,39.4695441 L73.7934912,59.6925702 C86.4558549,69.2403631 102.104532,81.8392557 102.104532,86.4016913 C102.104533,93.6189834 99.0337832,97.9277545 92.5695848,95.5655717 C87.8765989,93.8506351 73.8015497,80.3744087 63.8173444,69.668717 L60.9242741,72.5617873 L57.7726319,69.4101451 L60.8017407,66.3810363 L60.8017407,66.3810363 Z M63.9533761,1.42108547e-13 L118.512977,32 L118.512977,96 L63.9533761,128 L9.39377563,96 L9.39377563,32 L63.9533761,1.42108547e-13 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/refresh-button": {
            "title": "$:/core/images/refresh-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-refresh-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M106.369002,39.4325143 C116.529932,60.3119371 112.939592,86.1974934 95.5979797,103.539105 C73.7286194,125.408466 38.2713806,125.408466 16.4020203,103.539105 C-5.46734008,81.6697449 -5.46734008,46.2125061 16.4020203,24.3431458 C19.5262146,21.2189514 24.5915344,21.2189514 27.7157288,24.3431458 C30.8399231,27.4673401 30.8399231,32.5326599 27.7157288,35.6568542 C12.0947571,51.2778259 12.0947571,76.6044251 27.7157288,92.2253967 C43.3367004,107.846368 68.6632996,107.846368 84.2842712,92.2253967 C97.71993,78.7897379 99.5995262,58.1740623 89.9230597,42.729491 L83.4844861,54.9932839 C81.4307001,58.9052072 76.5945372,60.4115251 72.682614,58.3577391 C68.7706907,56.3039532 67.2643728,51.4677903 69.3181587,47.555867 L84.4354914,18.7613158 C86.4966389,14.8353707 91.3577499,13.3347805 95.273202,15.415792 L124.145886,30.7612457 C128.047354,32.8348248 129.52915,37.6785572 127.455571,41.5800249 C125.381992,45.4814927 120.53826,46.9632892 116.636792,44.8897102 L106.369002,39.4325143 Z M98.1470904,27.0648707 C97.9798954,26.8741582 97.811187,26.6843098 97.6409651,26.4953413 L98.6018187,26.1987327 L98.1470904,27.0648707 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/right-arrow": {
            "title": "$:/core/images/right-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-right-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M80.3563798,109.353315 C78.9238993,110.786918 76.9450203,111.675144 74.7592239,111.675144 L-4.40893546,111.675144 C-8.77412698,111.675144 -12.3248558,108.130732 -12.3248558,103.758478 C-12.3248558,99.3951199 -8.78077754,95.8418109 -4.40893546,95.8418109 L66.8418109,95.8418109 L66.8418109,24.5910645 C66.8418109,20.225873 70.3862233,16.6751442 74.7584775,16.6751442 C79.1218352,16.6751442 82.6751442,20.2192225 82.6751442,24.5910645 L82.6751442,103.759224 C82.6751442,105.941695 81.7891419,107.920575 80.3566508,109.353886 Z\" transform=\"translate(35.175144, 64.175144) rotate(-45.000000) translate(-35.175144, -64.175144) \"></path>\n</svg>"
        },
        "$:/core/images/save-button": {
            "title": "$:/core/images/save-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/spiral": {
            "title": "$:/core/images/spiral",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-spiral tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074.14-2.64-1.89-4.89-4.52-5.03-2.64-.14-4.89 1.88-5.03 4.52-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01-.02-.015-.054-.045-.094-.088-.06-.064-.12-.145-.17-.244-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/star-filled": {
            "title": "$:/core/images/star-filled",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-star-filled tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M61.8361286,96.8228569 L99.1627704,124.110219 C101.883827,126.099427 105.541968,123.420868 104.505636,120.198072 L90.2895569,75.9887263 L89.0292911,79.8977279 L126.314504,52.5528988 C129.032541,50.5595011 127.635256,46.2255025 124.273711,46.2229134 L78.1610486,46.1873965 L81.4604673,48.6032923 L67.1773543,4.41589688 C66.1361365,1.19470104 61.6144265,1.19470104 60.5732087,4.41589688 L46.2900957,48.6032923 L49.5895144,46.1873965 L3.47685231,46.2229134 C0.115307373,46.2255025 -1.28197785,50.5595011 1.43605908,52.5528988 L38.7212719,79.8977279 L37.4610061,75.9887263 L23.2449266,120.198072 C22.2085954,123.420868 25.8667356,126.099427 28.5877926,124.110219 L65.9144344,96.8228569 L61.8361286,96.8228569 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-classic": {
            "title": "$:/core/images/storyview-classic",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-classic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-pop": {
            "title": "$:/core/images/storyview-pop",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-pop tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M16.0098166,56 C11.586117,56 8,59.5776607 8,63.9924054 L8,80.0075946 C8,84.4216782 11.5838751,88 16.0098166,88 L111.990183,88 C116.413883,88 120,84.4223393 120,80.0075946 L120,63.9924054 C120,59.5783218 116.416125,56 111.990183,56 L16.0098166,56 L16.0098166,56 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-zoomin": {
            "title": "$:/core/images/storyview-zoomin",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-zoomin tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.578055 16,24.0085154 L16,71.9914846 C16,76.4144655 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.421945 112,71.9914846 L112,24.0085154 C112,19.5855345 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tag-button": {
            "title": "$:/core/images/tag-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tag-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M18.1643182,47.6600756 L18.1677196,51.7651887 C18.1708869,55.5878829 20.3581578,60.8623899 23.0531352,63.5573673 L84.9021823,125.406414 C87.5996731,128.103905 91.971139,128.096834 94.6717387,125.396234 L125.766905,94.3010679 C128.473612,91.5943612 128.472063,87.2264889 125.777085,84.5315115 L63.9280381,22.6824644 C61.2305472,19.9849735 55.9517395,17.801995 52.1318769,17.8010313 L25.0560441,17.7942007 C21.2311475,17.7932358 18.1421354,20.8872832 18.1452985,24.7049463 L18.1535504,34.6641936 C18.2481119,34.6754562 18.3439134,34.6864294 18.4409623,34.6971263 C22.1702157,35.1081705 26.9295004,34.6530132 31.806204,33.5444844 C32.1342781,33.0700515 32.5094815,32.6184036 32.9318197,32.1960654 C35.6385117,29.4893734 39.5490441,28.718649 42.94592,29.8824694 C43.0432142,29.8394357 43.1402334,29.7961748 43.2369683,29.7526887 L43.3646982,30.0368244 C44.566601,30.5115916 45.6933052,31.2351533 46.6655958,32.2074439 C50.4612154,36.0030635 50.4663097,42.1518845 46.6769742,45.94122 C43.0594074,49.5587868 37.2914155,49.7181264 33.4734256,46.422636 C28.1082519,47.5454734 22.7987486,48.0186448 18.1643182,47.6600756 Z\"></path>\n        <path d=\"M47.6333528,39.5324628 L47.6562932,39.5834939 C37.9670934,43.9391617 26.0718874,46.3819521 17.260095,45.4107025 C5.27267473,44.0894301 -1.02778744,36.4307276 2.44271359,24.0779512 C5.56175386,12.9761516 14.3014034,4.36129832 24.0466405,1.54817001 C34.7269254,-1.53487574 43.7955833,3.51606438 43.7955834,14.7730751 L35.1728168,14.7730752 C35.1728167,9.91428944 32.0946059,8.19982862 26.4381034,9.83267419 C19.5270911,11.8276553 13.046247,18.2159574 10.7440788,26.4102121 C8.82861123,33.2280582 11.161186,36.0634845 18.2047888,36.8398415 C25.3302805,37.6252244 35.7353482,35.4884477 44.1208333,31.7188498 L44.1475077,31.7781871 C44.159701,31.7725635 44.1718402,31.7671479 44.1839238,31.7619434 C45.9448098,31.0035157 50.4503245,38.3109156 47.7081571,39.5012767 C47.6834429,39.512005 47.6585061,39.5223987 47.6333528,39.5324628 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/theme-button": {
            "title": "$:/core/images/theme-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-theme-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.854113,66.9453198 C54.3299482,65.1432292 53.0133883,63.518995 51.9542746,62.1263761 C40.8899947,47.578055 35.3091807,55.2383404 28.9941893,62.1263758 C22.6791979,69.0144112 30.6577916,74.5954741 24.6646171,79.4611023 C18.6714426,84.3267304 19.0414417,86.0133155 8.92654943,77.1119468 C-1.18834284,68.2105781 -1.88793412,65.7597832 2.7553553,60.6807286 C7.39864472,55.601674 11.2794845,63.5989423 20.7646627,54.5728325 C30.2498409,45.5467226 22.2819131,37.5470737 22.2819131,37.5470737 C22.2819131,37.5470737 42.0310399,-2.82433362 68.4206088,0.157393922 C94.8101776,3.13912147 58.4373806,-3.70356506 49.3898693,27.958066 C45.5161782,41.5139906 50.1107906,38.3197672 57.4560458,44.0453955 C59.1625767,45.3756367 63.8839488,48.777453 70.127165,53.3625321 C63.9980513,59.2416709 58.9704753,64.0315459 55.854113,66.9453198 Z M67.4952439,79.8919946 C83.5082212,96.9282402 105.237121,117.617674 112.611591,120.312493 C123.044132,124.12481 128.000001,117.170903 128,105.522947 C127.999999,98.3705516 104.170675,78.980486 84.0760493,63.7529565 C76.6683337,70.9090328 70.7000957,76.7055226 67.4952439,79.8919946 Z\"></path>\n        <path d=\"M58.2852966,138.232794 L58.2852966,88.3943645 C56.318874,88.3923153 54.7254089,86.7952906 54.7254089,84.8344788 C54.7254089,82.8684071 56.3175932,81.2745911 58.2890859,81.2745911 L79.6408336,81.2745911 C81.608998,81.2745911 83.2045105,82.8724076 83.2045105,84.8344788 C83.2045105,86.7992907 81.614366,88.3923238 79.6446228,88.3943645 L79.6446228,88.3943646 L79.6446228,138.232794 C79.6446228,144.131009 74.8631748,148.912457 68.9649597,148.912457 C63.0667446,148.912457 58.2852966,144.131009 58.2852966,138.232794 Z M65.405072,-14.8423767 L72.5248474,-14.8423767 L76.0847351,-0.690681892 L72.5248474,6.51694947 L72.5248474,81.2745911 L65.405072,81.2745911 L65.405072,6.51694947 L61.8451843,-0.690681892 L65.405072,-14.8423767 Z\" transform=\"translate(68.964960, 67.035040) rotate(45.000000) translate(-68.964960, -67.035040) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tip": {
            "title": "$:/core/images/tip",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tip tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128.241818 C99.346224,128.241818 128,99.5880417 128,64.2418177 C128,28.8955937 99.346224,0.241817675 64,0.241817675 C28.653776,0.241817675 0,28.8955937 0,64.2418177 C0,99.5880417 28.653776,128.241818 64,128.241818 Z M75.9358659,91.4531941 C75.3115438,95.581915 70.2059206,98.8016748 64,98.8016748 C57.7940794,98.8016748 52.6884562,95.581915 52.0641341,91.4531941 C54.3299053,94.0502127 58.8248941,95.8192805 64,95.8192805 C69.1751059,95.8192805 73.6700947,94.0502127 75.9358659,91.4531941 L75.9358659,91.4531941 Z M75.9358659,95.9453413 C75.3115438,100.074062 70.2059206,103.293822 64,103.293822 C57.7940794,103.293822 52.6884562,100.074062 52.0641341,95.9453413 C54.3299053,98.5423599 58.8248941,100.311428 64,100.311428 C69.1751059,100.311428 73.6700947,98.5423599 75.9358659,95.9453413 L75.9358659,95.9453413 Z M75.9358659,100.40119 C75.3115438,104.529911 70.2059206,107.74967 64,107.74967 C57.7940794,107.74967 52.6884562,104.529911 52.0641341,100.40119 C54.3299053,102.998208 58.8248941,104.767276 64,104.767276 C69.1751059,104.767276 73.6700947,102.998208 75.9358659,100.40119 L75.9358659,100.40119 Z M75.9358659,104.893337 C75.3115438,109.022058 70.2059206,112.241818 64,112.241818 C57.7940794,112.241818 52.6884562,109.022058 52.0641341,104.893337 C54.3299053,107.490356 58.8248941,109.259423 64,109.259423 C69.1751059,109.259423 73.6700947,107.490356 75.9358659,104.893337 L75.9358659,104.893337 Z M64.3010456,24.2418177 C75.9193117,24.2418188 88.0000013,32.0619847 88,48.4419659 C87.9999987,64.8219472 75.9193018,71.7540963 75.9193021,83.5755932 C75.9193022,89.4486648 70.0521957,92.8368862 63.9999994,92.8368862 C57.947803,92.8368862 51.9731007,89.8295115 51.9731007,83.5755932 C51.9731007,71.1469799 39.9999998,65.4700602 40,48.4419647 C40.0000002,31.4138691 52.6827796,24.2418166 64.3010456,24.2418177 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/twitter": {
            "title": "$:/core/images/twitter",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-twitter tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M41.6263422,115.803477 C27.0279663,115.803477 13.4398394,111.540813 1.99987456,104.234833 C4.02221627,104.472643 6.08004574,104.594302 8.16644978,104.594302 C20.277456,104.594302 31.4238403,100.47763 40.270894,93.5715185 C28.9590538,93.3635501 19.4123842,85.9189246 16.1230832,75.6885328 C17.7011365,75.9892376 19.320669,76.1503787 20.9862896,76.1503787 C23.344152,76.1503787 25.6278127,75.8359011 27.7971751,75.247346 C15.9709927,72.8821073 7.06079851,62.4745062 7.06079851,49.9982394 C7.06079851,49.8898938 7.06079851,49.7820074 7.06264203,49.67458 C10.5482779,51.6032228 14.5339687,52.7615103 18.7717609,52.8951059 C11.8355159,48.277565 7.2714207,40.3958845 7.2714207,31.4624258 C7.2714207,26.7434257 8.54621495,22.3200804 10.7713439,18.5169676 C23.5211299,34.0957738 42.568842,44.3472839 64.0532269,45.4210985 C63.6126256,43.5365285 63.3835682,41.5711584 63.3835682,39.5529928 C63.3835682,25.3326379 74.95811,13.8034766 89.2347917,13.8034766 C96.6697089,13.8034766 103.387958,16.930807 108.103682,21.9353619 C113.991886,20.780288 119.52429,18.6372496 124.518847,15.6866694 C122.588682,21.6993889 118.490075,26.7457211 113.152623,29.9327334 C118.381769,29.3102055 123.363882,27.926045 127.999875,25.8780385 C124.534056,31.0418981 120.151087,35.5772616 115.100763,39.2077561 C115.150538,40.3118708 115.175426,41.4224128 115.175426,42.538923 C115.175426,76.5663154 89.1744164,115.803477 41.6263422,115.803477\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/unfold-all-button": {
            "title": "$:/core/images/unfold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unfold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M85.598226,8.34884273 C84.1490432,6.89863875 82.1463102,6 79.9340286,6 L47.9482224,6 C43.5292967,6 39.9411255,9.581722 39.9411255,14 C39.9411255,18.4092877 43.5260249,22 47.9482224,22 L71.9411255,22 L71.9411255,45.9929031 C71.9411255,50.4118288 75.5228475,54 79.9411255,54 C84.3504132,54 87.9411255,50.4151006 87.9411255,45.9929031 L87.9411255,14.0070969 C87.9411255,11.7964515 87.0447363,9.79371715 85.5956548,8.34412458 Z\" transform=\"translate(63.941125, 30.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -30.000000) \"></path>\n        <path d=\"M85.6571005,72.2899682 C84.2079177,70.8397642 82.2051847,69.9411255 79.9929031,69.9411255 L48.0070969,69.9411255 C43.5881712,69.9411255 40,73.5228475 40,77.9411255 C40,82.3504132 43.5848994,85.9411255 48.0070969,85.9411255 L72,85.9411255 L72,109.934029 C72,114.352954 75.581722,117.941125 80,117.941125 C84.4092877,117.941125 88,114.356226 88,109.934029 L88,77.9482224 C88,75.737577 87.1036108,73.7348426 85.6545293,72.2852501 Z\" transform=\"translate(64.000000, 93.941125) scale(1, -1) rotate(-45.000000) translate(-64.000000, -93.941125) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unfold-button": {
            "title": "$:/core/images/unfold-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unfold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M85.598226,11.3488427 C84.1490432,9.89863875 82.1463102,9 79.9340286,9 L47.9482224,9 C43.5292967,9 39.9411255,12.581722 39.9411255,17 C39.9411255,21.4092877 43.5260249,25 47.9482224,25 L71.9411255,25 L71.9411255,48.9929031 C71.9411255,53.4118288 75.5228475,57 79.9411255,57 C84.3504132,57 87.9411255,53.4151006 87.9411255,48.9929031 L87.9411255,17.0070969 C87.9411255,14.7964515 87.0447363,12.7937171 85.5956548,11.3441246 Z\" transform=\"translate(63.941125, 33.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -33.000000) \"></path>\n        <path d=\"M85.6571005,53.4077172 C84.2079177,51.9575133 82.2051847,51.0588745 79.9929031,51.0588745 L48.0070969,51.0588745 C43.5881712,51.0588745 40,54.6405965 40,59.0588745 C40,63.4681622 43.5848994,67.0588745 48.0070969,67.0588745 L72,67.0588745 L72,91.0517776 C72,95.4707033 75.581722,99.0588745 80,99.0588745 C84.4092877,99.0588745 88,95.4739751 88,91.0517776 L88,59.0659714 C88,56.855326 87.1036108,54.8525917 85.6545293,53.4029991 Z\" transform=\"translate(64.000000, 75.058875) scale(1, -1) rotate(-45.000000) translate(-64.000000, -75.058875) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unlocked-padlock": {
            "title": "$:/core/images/unlocked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unlocked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/up-arrow": {
            "created": "20150316000544368",
            "modified": "20150316000831867",
            "tags": "$:/tags/Image",
            "title": "$:/core/images/up-arrow",
            "text": "<svg class=\"tc-image-up-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n<path transform=\"rotate(-135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25074c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056l0.00001,-0.00001z\" />\n</svg>\n \n"
        },
        "$:/core/images/video": {
            "title": "$:/core/images/video",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-video tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,12 C29.0909091,12 8.72727273,14.9166667 5.81818182,17.8333333 C2.90909091,20.75 1.93784382e-15,41.1666667 0,64.5 C1.93784382e-15,87.8333333 2.90909091,108.25 5.81818182,111.166667 C8.72727273,114.083333 29.0909091,117 64,117 C98.9090909,117 119.272727,114.083333 122.181818,111.166667 C125.090909,108.25 128,87.8333333 128,64.5 C128,41.1666667 125.090909,20.75 122.181818,17.8333333 C119.272727,14.9166667 98.9090909,12 64,12 Z M54.9161194,44.6182253 C51.102648,42.0759111 48.0112186,43.7391738 48.0112186,48.3159447 L48.0112186,79.6840553 C48.0112186,84.2685636 51.109784,85.9193316 54.9161194,83.3817747 L77.0838806,68.6032672 C80.897352,66.0609529 80.890216,61.9342897 77.0838806,59.3967328 L54.9161194,44.6182253 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/warning": {
            "title": "$:/core/images/warning",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-warning tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M57.0717968,11 C60.1509982,5.66666667 67.8490018,5.66666667 70.9282032,11 L126.353829,107 C129.433031,112.333333 125.584029,119 119.425626,119 L8.57437416,119 C2.41597129,119 -1.43303051,112.333333 1.64617093,107 L57.0717968,11 Z M64,37 C59.581722,37 56,40.5820489 56,44.9935776 L56,73.0064224 C56,77.4211534 59.5907123,81 64,81 C68.418278,81 72,77.4179511 72,73.0064224 L72,44.9935776 C72,40.5788466 68.4092877,37 64,37 Z M64,104 C68.418278,104 72,100.418278 72,96 C72,91.581722 68.418278,88 64,88 C59.581722,88 56,91.581722 56,96 C56,100.418278 59.581722,104 64,104 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "advanced search"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Advanced search"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "cancel"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Discard changes to this tiddler"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "clone"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Clone this tiddler"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "close"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Close this tiddler"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "close all"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Close all tiddlers"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "close others"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Close other tiddlers"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "control panel"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Open control panel"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "delete"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "Delete this tiddler"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "edit"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Edit this tiddler"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "encryption"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Set or clear a password for saving this wiki"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "clear password"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Clear the password and save this wiki without encryption"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "set password"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Set a password for saving this wiki with encryption"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "export all"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Export all tiddlers"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "export tiddler"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Export tiddler"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "export tiddlers"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Export tiddlers"
        },
        "$:/language/Buttons/Fold/Caption": {
            "title": "$:/language/Buttons/Fold/Caption",
            "text": "fold tiddler"
        },
        "$:/language/Buttons/Fold/Hint": {
            "title": "$:/language/Buttons/Fold/Hint",
            "text": "Fold the body of this tiddler"
        },
        "$:/language/Buttons/Fold/FoldBar/Caption": {
            "title": "$:/language/Buttons/Fold/FoldBar/Caption",
            "text": "fold-bar"
        },
        "$:/language/Buttons/Fold/FoldBar/Hint": {
            "title": "$:/language/Buttons/Fold/FoldBar/Hint",
            "text": "Optional bars to fold and unfold tiddlers"
        },
        "$:/language/Buttons/Unfold/Caption": {
            "title": "$:/language/Buttons/Unfold/Caption",
            "text": "unfold tiddler"
        },
        "$:/language/Buttons/Unfold/Hint": {
            "title": "$:/language/Buttons/Unfold/Hint",
            "text": "Unfold the body of this tiddler"
        },
        "$:/language/Buttons/FoldOthers/Caption": {
            "title": "$:/language/Buttons/FoldOthers/Caption",
            "text": "fold other tiddlers"
        },
        "$:/language/Buttons/FoldOthers/Hint": {
            "title": "$:/language/Buttons/FoldOthers/Hint",
            "text": "Fold the bodies of other opened tiddlers"
        },
        "$:/language/Buttons/FoldAll/Caption": {
            "title": "$:/language/Buttons/FoldAll/Caption",
            "text": "fold all tiddlers"
        },
        "$:/language/Buttons/FoldAll/Hint": {
            "title": "$:/language/Buttons/FoldAll/Hint",
            "text": "Fold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Caption": {
            "title": "$:/language/Buttons/UnfoldAll/Caption",
            "text": "unfold all tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Hint": {
            "title": "$:/language/Buttons/UnfoldAll/Hint",
            "text": "Unfold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "full-screen"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Enter or leave full-screen mode"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "help"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Show help panel"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "import"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Import many types of file including text, image, TiddlyWiki or JSON"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "info"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Show information for this tiddler"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "home"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Open the default tiddlers"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "language"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Choose the user interface language"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "more"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "More actions"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "new here"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Create a new tiddler tagged with this one"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "new journal"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Create a new journal tiddler"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "new journal here"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Create a new journal tiddler tagged with this one"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "new tiddler"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Create a new tiddler"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "open in new window"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Open tiddler in new window"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "palette"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Choose the colour palette"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "permalink"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Set browser address bar to a direct link to this tiddler"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "permaview"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Set browser address bar to a direct link to all the tiddlers in this story"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "refresh"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Perform a full refresh of the wiki"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "ok"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Confirm changes to this tiddler"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "save changes"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Save changes"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "storyview"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Choose the story visualisation"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "hide sidebar"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Hide sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "show sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Show sidebar"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "tag manager"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Open tag manager"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "theme"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Choose the display theme"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Internal information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Appearance"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Ways to customise the appearance of your TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Animation duration:"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Basics"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Use &#91;&#91;double square brackets&#93;&#93; for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Default tiddlers:"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Choose which tiddlers are displayed at startup:"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Hello! Current language:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Title of new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Tags for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Number of overridden shadow tiddlers:"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Number of shadow tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Subtitle:"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Number of system tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Number of tags:"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Number of tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Title of this ~TiddlyWiki:"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Username for signing edits:"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "~TiddlyWiki version:"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Editor Types"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Editor"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "These tiddlers determine which editor is used to edit specific tiddler types."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Type"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Info"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Loaded Modules"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "clone"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "It is recommended that you clone this shadow palette before editing it"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "This shadow palette has been modified"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Editing"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "reset"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "hide editor"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Current palette:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "show editor"
        },
        "$:/language/ControlPanel/Parsing/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Caption",
            "text": "Parsing"
        },
        "$:/language/ControlPanel/Parsing/Hint": {
            "title": "$:/language/ControlPanel/Parsing/Hint",
            "text": "Here you can globally disable individual wiki parser rules. Take care as disabling some parser rules can prevent ~TiddlyWiki functioning correctly (you can restore normal operation with [[safe mode|http://tiddlywiki.com/#SafeMode]] )"
        },
        "$:/language/ControlPanel/Parsing/Block/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Block/Caption",
            "text": "Block Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Inline/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Inline/Caption",
            "text": "Inline Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Pragma/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
            "text": "Pragma Parse Rules"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Install plugins from the official library"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Get more plugins"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "disable"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Disable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(disabled)"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "None"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "enable"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Enable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Install": {
            "title": "$:/language/ControlPanel/Plugins/Install",
            "text": "install"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Currently installed plugins:"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Languages"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Language pack plugins"
        },
        "$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
            "text": "open plugin library"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Reinstall": {
            "title": "$:/language/ControlPanel/Plugins/Reinstall",
            "text": "reinstall"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Themes"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Theme plugins"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/Heading": {
            "title": "$:/language/ControlPanel/Saving/Heading",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Advanced Settings"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Backup Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backups"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Upload Filename"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Password"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "Server URL"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Upload Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Wiki Name"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Autosave"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Do not save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Automatically save changes during editing"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Caption": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
            "text": "Camel Case Wiki Links"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Hint": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
            "text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Description": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Description",
            "text": "Enable automatic ~CamelCase linking"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Settings"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "These settings let you customise the behaviour of TiddlyWiki."
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Navigation Address Bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Behaviour of the browser address bar when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Do not update the address bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Include the target tiddler"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Include the target tiddler and the current story sequence"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "Navigation History"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Update browser history when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Do not update history"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Update history"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
            "text": "Performance Instrumentation"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
            "text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
            "text": "Enable performance instrumentation"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Toolbar Button Style"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Choose the style for toolbar buttons:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Borderless"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Boxed"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Rounded"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Toolbar Buttons"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Default toolbar button appearance:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Include icon"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Include text"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Default Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Specify which sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Tiddler Opening Behaviour"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "Navigation from //within// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "Navigation from //outside// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Open above the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Open below the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Open at the top of the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Open at the bottom of the story river"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Tiddler Titles"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Optionally display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Do not display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Display tiddler titles as links"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Story View"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Current view:"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Theme"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Current theme:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Tiddler Fields"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Toolbars"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "Edit Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in edit mode"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Select which toolbar buttons are displayed"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Page Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Choose which buttons are displayed on the main page toolbar"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "View Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in view mode"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Download full wiki"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": "st"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Sunday"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Monday"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Tuesday"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Wednesday"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Thursday"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Friday"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Saturday"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "January"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "February"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "March"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "April"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "May"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "June"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "July"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "August"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "September"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "October"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "November"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "December"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "am"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "pm"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Sun"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Mon"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Tue"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Wed"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Thu"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Fri"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Sat"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "Jan"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "Feb"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "Mar"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "Apr"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "May"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "Jun"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "Jul"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "Aug"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "Sep"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "Oct"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "Nov"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "Dec"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "<<period>> days from now"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "<<period>> hours from now"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "<<period>> minutes from now"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "<<period>> months from now"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "1 second from now"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "<<period>> seconds from now"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "<<period>> years from now"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> days ago"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> hours ago"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> minutes ago"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> months ago"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 second ago"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> seconds ago"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> years ago"
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animations that may be used with the RevealWidget."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Commands that can be executed under Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Data to be inserted into `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Individual filter operator methods."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Global data to be inserted into `$tw`."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operands for the ''is'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "JavaScript macro definitions."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Parsers for different content types."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Savers handle different methods for saving files from the browser."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Startup functions."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Story views customise the animation and behaviour of list widgets."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Converts different content types into tiddlers."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Defines the behaviour of an individual tiddler field."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Adds methods to the `$tw.Tiddler` prototype."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Applies upgrade processing to tiddlers during an upgrade/import."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Adds methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Adds Node.js-specific methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Widgets encapsulate DOM rendering and refreshing."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Adds methods to `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Individual parser rules for the main WikiText parser."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Alert background"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Alert border"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Alert highlight"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Alert muted foreground"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "General background"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Blockquote bar"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Default button background"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Default button border"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Default button foreground"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Unsaved changes indicator"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Code background"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Code border"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Code foreground"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Download button background"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Download button foreground"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Dragger background"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Dragger foreground"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Dropdown background"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Dropdown border"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Dropdown tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Dropdown tab background"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Dropzone background"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "External link background hover"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "External link background visited"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "External link background"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "External link foreground hover"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "External link foreground visited"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "External link foreground"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "General foreground"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Message box background"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Message box border"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Message box foreground"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Modal backdrop"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Modal background"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Modal border"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Modal footer background"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Modal footer border"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Modal header border"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "General muted foreground"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Notification background"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Notification border"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Page background"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Preformatted code background"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Preformatted code border"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "General primary"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Sidebar button foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Sidebar controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Sidebar controls foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Sidebar foreground shadow"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Sidebar foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Sidebar muted foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Sidebar muted foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Sidebar tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Sidebar tab background"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Sidebar tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Sidebar tab border"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Sidebar tab divider"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Sidebar tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Sidebar tab foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Sidebar tiddler link foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Sidebar tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Site title foreground"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Static alert foreground"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Tab background"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Tab border"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Tab divider"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Tab foreground"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Table border"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Table footer background"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Table header background"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Tag background"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Tag foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Tiddler background"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Tiddler border"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Tiddler controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Tiddler controls foreground for selected controls"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Tiddler controls foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Tiddler editor background"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Tiddler editor border image"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Tiddler editor border"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Tiddler editor background for even fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Tiddler editor background for odd fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Tiddler info panel background"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Tiddler info panel border"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Tiddler info panel tab background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Tiddler link background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Tiddler subtitle foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Tiddler title foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Toolbar 'new tiddler' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Toolbar 'options' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Toolbar 'save' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Toolbar 'info' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Toolbar 'edit' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Toolbar 'close' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Toolbar 'delete' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Toolbar 'cancel' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Toolbar 'done' button foreground"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Untagged pill background"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Very muted foreground"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "This is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Hint": {
            "title": "$:/language/EditTemplate/Body/Hint",
            "text": "Use [[wiki text|http://tiddlywiki.com/static/WikiText.html]] to add formatting, images, and dynamic features"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Button/Hide": {
            "title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
            "text": "hide preview"
        },
        "$:/language/EditTemplate/Body/Preview/Button/Show": {
            "title": "$:/language/EditTemplate/Body/Preview/Button/Show",
            "text": "show preview"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "remove field"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Remove field"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "field name"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Add a new field:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "field value"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "System fields"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "User fields"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "tag name"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "tag list"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Show tag list"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "content type list"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Show content type list"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "delete content type"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Delete content type"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "content type"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Type:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Static HTML"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "JSON file"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "CSV file"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "\".tid\" file"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "The full URI of an external image tiddler"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "The name of the bag from which a tiddler came"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "The text to be displayed on a tab or button"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "The CSS color value associated with a tiddler"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "The date a tiddler was created"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "The name of the person who created a tiddler"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "For a plugin, lists the dependent plugin titles"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "The descriptive text for a plugin, or a modal dialogue"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "The footer text for a wizard"
        },
        "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
            "title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
            "text": "A temporary storage field used in [[$:/core/templates/static.content]]"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "The title of the tiddler containing the icon associated with a tiddler"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "If set to \"yes\" indicates that a tiddler should be saved as a JavaScript library"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "An ordered list of tiddler titles associated with a tiddler"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles"
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "The date and time at which a tiddler was last modified"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "The tiddler title associated with the person who last modified a tiddler"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "The human readable name associated with a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "A numerical value indicating the priority of a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "The type of plugin in a plugin tiddler"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "The revision of the tiddler held at the server"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Date of a TiddlyWiki release"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "The source URL associated with a tiddler"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "The subtitle text for a wizard"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "A list of tags associated with a tiddler"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "The body text of a tiddler"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "The unique name of a tiddler"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "The content type of a tiddler"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Version information for a plugin"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "All tiddlers except system tiddlers"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Recently modified tiddlers, including system tiddlers"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Recently modified tiddlers"
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "All tags except system tags"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Missing tiddlers"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Draft tiddlers"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Orphan tiddlers"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "System tiddlers"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Shadow tiddlers"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Overridden shadow tiddlers"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System tags"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Non wiki-text tiddlers"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is important to make sure that you can reliably save changes. See http://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
        },
        "$:/language/Help/build": {
            "title": "$:/language/Help/build",
            "description": "Automatically run configured commands",
            "text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
        },
        "$:/language/Help/clearpassword": {
            "title": "$:/language/Help/clearpassword",
            "description": "Clear a password for subsequent crypto operations",
            "text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
        },
        "$:/language/Help/default": {
            "title": "$:/language/Help/default",
            "text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
        },
        "$:/language/Help/editions": {
            "title": "$:/language/Help/editions",
            "description": "Lists the available editions of TiddlyWiki",
            "text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
        },
        "$:/language/Help/help": {
            "title": "$:/language/Help/help",
            "description": "Display help for TiddlyWiki commands",
            "text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
        },
        "$:/language/Help/init": {
            "title": "$:/language/Help/init",
            "description": "Initialise a new wiki folder",
            "text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
        },
        "$:/language/Help/load": {
            "title": "$:/language/Help/load",
            "description": "Load tiddlers from a file",
            "text": "Load tiddlers from 2.x.x TiddlyWiki files (`.html`), `.tiddler`, `.tid`, `.json` or other files\n\n```\n--load <filepath>\n```\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/makelibrary": {
            "title": "$:/language/Help/makelibrary",
            "description": "Construct library plugin required by upgrade process",
            "text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
        },
        "$:/language/Help/notfound": {
            "title": "$:/language/Help/notfound",
            "text": "No such help item"
        },
        "$:/language/Help/output": {
            "title": "$:/language/Help/output",
            "description": "Set the base output directory for subsequent commands",
            "text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
        },
        "$:/language/Help/password": {
            "title": "$:/language/Help/password",
            "description": "Set a password for subsequent crypto operations",
            "text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Render an individual tiddler as a specified ContentType",
            "text": "Render an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename. Optionally a template can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Render tiddlers matching a filter to a specified ContentType",
            "text": "Render a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Saves a raw tiddler to a file",
            "text": "Saves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/savetiddlers": {
            "title": "$:/language/Help/savetiddlers",
            "description": "Saves a group of raw tiddlers to a directory",
            "text": "Saves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Provides an HTTP server interface to TiddlyWiki",
            "text": "The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.\n\nAt the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.\n\n```\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>\n```\n\nThe parameters are:\n\n* ''port'' - port number to serve from (defaults to \"8080\")\n* ''roottiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''servetype'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''pathprefix'' - optional prefix for paths\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password:\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\n"
        },
        "$:/language/Help/setfield": {
            "title": "$:/language/Help/setfield",
            "description": "Prepares external tiddlers for use",
            "text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
        },
        "$:/language/Help/unpackplugin": {
            "title": "$:/language/Help/unpackplugin",
            "description": "Unpack the payload tiddlers from a plugin",
            "text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
        },
        "$:/language/Help/verbose": {
            "title": "$:/language/Help/verbose",
            "description": "Triggers verbose output mode",
            "text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
        },
        "$:/language/Help/version": {
            "title": "$:/language/Help/version",
            "description": "Displays the version number of TiddlyWiki",
            "text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
        },
        "$:/language/Import/Imported": {
            "title": "$:/language/Import/Imported",
            "text": "The following tiddlers were imported:"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Cancel"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "These tiddlers are ready to import:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Import"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Select"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Status"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Title"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Blocked incompatible or obsolete plugin"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Blocked temporary state tiddler"
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Blocked system tiddler"
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrated theme tweak from <$text text=<<from>>/>"
        },
        "$:/language/AboveStory/ClassicPlugin/Warning": {
            "title": "$:/language/AboveStory/ClassicPlugin/Warning",
            "text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|http://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "This tiddler contains binary data"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See http://tiddlywiki.com/static/Upgrading.html for more details."
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "upgrade"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "close all"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "New Tiddler"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Drop here (or use the 'Escape' key to cancel)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Cancel"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Set a new password for this TiddlyWiki"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Username"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Password"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Repeat password"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Passwords do not match"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Set password"
        },
        "$:/language/InternalJavaScriptError/Title": {
            "title": "$:/language/InternalJavaScriptError/Title",
            "text": "Internal JavaScript Error"
        },
        "$:/language/InternalJavaScriptError/Hint": {
            "title": "$:/language/InternalJavaScriptError/Hint",
            "text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
        },
        "$:/language/LazyLoadingWarning": {
            "title": "$:/language/LazyLoadingWarning",
            "text": "<p>Loading external text from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear you may be using a browser that doesn't support external text in this configuration. See http://tiddlywiki.com/#ExternalText</p>"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" - click {{$:/core/images/edit-button}} to create"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Official ~TiddlyWiki Plugin Library"
        },
        "$:/language/OfficialPluginLibrary/Hint": {
            "title": "$:/language/OfficialPluginLibrary/Hint",
            "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DDth MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "This is a system tiddler"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Colour"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Count"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Icon"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tag"
        },
        "$:/language/Tiddler/DateFormat": {
            "title": "$:/language/Tiddler/DateFormat",
            "text": "DDth MMM YYYY at hh12:0mmam"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "You have unsaved changes in TiddlyWiki"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://tiddlywiki.com/static/SavingChanges.html",
            "text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DDth MMM YYYY"
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Journal"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Saved wiki"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Starting to save wiki"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "List"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Filter"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Search via a [[filter expression|http://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches/All": {
            "title": "$:/language/Search/Matches/All",
            "text": "All matches:"
        },
        "$:/language/Search/Matches/Title": {
            "title": "$:/language/Search/Matches/Title",
            "text": "Title matches:"
        },
        "$:/language/Search/Search": {
            "title": "$:/language/Search/Search",
            "text": "Search"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Search for shadow tiddlers"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Standard"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Search for standard tiddlers"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "System"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Search for system tiddlers"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "All"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Contents"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Drafts"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Missing"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "More"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Open"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Orphans"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Recent"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "System"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Tags"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "untagged"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Types"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "a non-linear personal web notebook"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "My ~TiddlyWiki"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "none"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Plugin Details"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "This plugin contains the following shadow tiddlers:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Shadow Status"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "It is overridden by an ordinary tiddler"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Fields"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "List"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "This tiddler does not have a list"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "Listed"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "This tiddler is not listed by any others"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "References"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "No tiddlers link to this one"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Tagging"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "No tiddlers are tagged with this one"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript code",
            "name": "application/javascript",
            "group": "Developer"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Developer"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Data dictionary",
            "name": "application/x-tiddler-dictionary",
            "group": "Developer"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF image",
            "name": "image/gif",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG image",
            "name": "image/jpeg",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG image",
            "name": "image/png",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO format icon file",
            "name": "image/x-icon",
            "group": "Image"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Developer"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML markup",
            "name": "text/html",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Plain text",
            "name": "text/plain",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Text"
        },
        "$:/languages/en-GB/icon": {
            "title": "$:/languages/en-GB/icon",
            "type": "image/svg+xml",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
        },
        "$:/languages/en-GB": {
            "title": "$:/languages/en-GB",
            "name": "en-GB",
            "description": "English (British)",
            "author": "JeremyRuston",
            "core-version": ">=5.0.0\"",
            "text": "Stub pseudo-plugin for the default language"
        },
        "$:/core/modules/commander.js": {
            "text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
            "title": "$:/core/modules/commander.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/commands/build.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/build.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/clearpassword.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/clearpassword.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/editions.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\"    \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/editions.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/help.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/help.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/init.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/init.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/load.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar ext = path.extname(self.params[0]);\n\tfs.readFile(this.params[0],$tw.utils.getTypeEncoding(ext),function(err,data) {\n\t\tif (err) {\n\t\t\tself.callback(err);\n\t\t} else {\n\t\t\tvar fields = {title: self.params[0]},\n\t\t\t\ttype = path.extname(self.params[0]);\n\t\t\tvar tiddlers = self.commander.wiki.deserializeTiddlers(type,data,fields);\n\t\t\tif(!tiddlers) {\n\t\t\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t\t\t} else {\n\t\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddlers[t]));\n\t\t\t\t}\n\t\t\t\tself.callback(null);\t\n\t\t\t}\n\t\t}\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/load.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/makelibrary.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/makelibrary.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/output.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/output.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/password.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/password.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/rendertiddler.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/rendertiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savelibrarytiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{text: undefined, readme: readmeContent, icon: iconContent}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savelibrarytiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title),\n\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t$tw.utils.createFileDirectories(filename);\n\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savetiddler.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savetiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/server.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\n}\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\n/*\nA simple HTTP server with regexp-based routes\n*/\nfunction SimpleServer(options) {\n\tthis.routes = options.routes || [];\n\tthis.wiki = options.wiki;\n\tthis.variables = options.variables || {};\n}\n\nSimpleServer.prototype.set = function(obj) {\n\tvar self = this;\n\t$tw.utils.each(obj,function(value,name) {\n\t\tself.variables[name] = value;\n\t});\n};\n\nSimpleServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nSimpleServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nSimpleServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"pathprefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length);\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nSimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {\n\tvar header = request.headers.authorization || \"\",\n\t\ttoken = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tusername = parts[0],\n\t\tpassword = parts[1];\n\tif(incomingUsername === username && incomingPassword === password) {\n\t\treturn \"ALLOWED\";\n\t} else {\n\t\treturn \"DENIED\";\n\t}\n};\n\nSimpleServer.prototype.listen = function(port,host) {\n\tvar self = this;\n\thttp.createServer(function(request,response) {\n\t\t// Compose the state object\n\t\tvar state = {};\n\t\tstate.wiki = self.wiki;\n\t\tstate.server = self;\n\t\tstate.urlInfo = url.parse(request.url);\n\t\t// Find the route that matches this path\n\t\tvar route = self.findMatchingRoute(request,state);\n\t\t// Check for the username and password if we've got one\n\t\tvar username = self.get(\"username\"),\n\t\t\tpassword = self.get(\"password\");\n\t\tif(username && password) {\n\t\t\t// Check they match\n\t\t\tif(self.checkCredentials(request,username,password) !== \"ALLOWED\") {\n\t\t\t\tvar servername = state.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\";\n\t\t\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + servername + '\"'\n\t\t\t\t});\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Return a 404 if we didn't find a route\n\t\tif(!route) {\n\t\t\tresponse.writeHead(404);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t\t// Set the encoding for the incoming request\n\t\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\t\trequest.setEncoding(\"utf8\");\n\t\t// Dispatch the appropriate method\n\t\tswitch(request.method) {\n\t\t\tcase \"GET\": // Intentional fall-through\n\t\t\tcase \"DELETE\":\n\t\t\t\troute.handler(request,response,state);\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tvar data = \"\";\n\t\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\t\tdata += chunk.toString();\n\t\t\t\t});\n\t\t\t\trequest.on(\"end\",function() {\n\t\t\t\t\tstate.data = data;\n\t\t\t\t\troute.handler(request,response,state);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields.revision) {\n\t\t\t\tdelete fields.revision;\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"DELETE\",\n\t\tpath: /^\\/bags\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]);\n\t\t\tstate.wiki.deleteTiddler(title);\n\t\t\tresponse.writeHead(204, \"OK\", {\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": state.server.get(\"serveType\")});\n\t\t\tvar text = state.wiki.renderTiddler(state.server.get(\"renderType\"),state.server.get(\"rootTiddler\"));\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/status$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar text = JSON.stringify({\n\t\t\t\tusername: state.server.get(\"username\"),\n\t\t\t\tspace: {\n\t\t\t\t\trecipe: \"default\"\n\t\t\t\t},\n\t\t\t\ttiddlywiki_version: $tw.version\n\t\t\t});\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/favicon.ico$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\t\t\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\t\t\tresponse.end(buffer,\"base64\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers.json$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar tiddlers = [];\n\t\t\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\t\t\tvar tiddlerFields = {};\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tif(name !== \"text\") {\n\t\t\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\ttiddlers.push(tiddlerFields);\n\t\t\t});\n\t\t\tvar text = JSON.stringify(tiddlers);\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\ttiddler = state.wiki.getTiddler(title),\n\t\t\t\ttiddlerFields = {},\n\t\t\t\tknownFields = [\n\t\t\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t\t\t];\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\t\t\ttiddlerFields[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t\t\t} else {\n\t\t\t\tresponse.writeHead(404);\n\t\t\t\tresponse.end();\n\t\t\t}\n\t\t}\n\t});\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\tvar port = this.params[0] || \"8080\",\n\t\trootTiddler = this.params[1] || \"$:/core/save/all\",\n\t\trenderType = this.params[2] || \"text/plain\",\n\t\tserveType = this.params[3] || \"text/html\",\n\t\tusername = this.params[4],\n\t\tpassword = this.params[5],\n\t\thost = this.params[6] || \"127.0.0.1\",\n\t\tpathprefix = this.params[7];\n\tthis.server.set({\n\t\trootTiddler: rootTiddler,\n\t\trenderType: renderType,\n\t\tserveType: serveType,\n\t\tusername: username,\n\t\tpassword: password,\n\t\tpathprefix: pathprefix\n\t});\n\tthis.server.listen(port,host);\n\tconsole.log(\"Serving on \" + host + \":\" + port);\n\tconsole.log(\"(press ctrl-C to exit)\");\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/server.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/setfield.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/setfield.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/unpackplugin.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/unpackplugin.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/verbose.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n  \" + $tw.boot.logMessages.join(\"\\n  \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/verbose.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/version.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/version.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/config.js": {
            "text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter:   \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
            "title": "$:/core/modules/config.js",
            "type": "application/javascript",
            "module-type": "config"
        },
        "$:/core/modules/deserializers.js": {
            "text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming = JSON.parse(text),\n\t\tresults = [];\n\tif($tw.utils.isArray(incoming)) {\n\t\tfor(var t=0; t<incoming.length; t++) {\n\t\t\tvar incomingFields = incoming[t],\n\t\t\t\tfields = {};\n\t\t\tfor(var f in incomingFields) {\n\t\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t\t}\n\t\t\t}\n\t\t\tresults.push(fields);\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
            "title": "$:/core/modules/deserializers.js",
            "type": "application/javascript",
            "module-type": "tiddlerdeserializer"
        },
        "$:/core/modules/filters/addprefix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/addprefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/addsuffix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/addsuffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/after.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/after.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/all/current.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/current.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/missing.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/missing.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/orphans.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/orphans.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/shadows.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/shadows.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/tiddlers.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/backlinks.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/backlinks.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/before.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/before.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/commands.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/commands.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/days.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/days.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/each.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\t\tvalue,values = {},\n\t\tfield = operator.operand || \"title\";\n\tif(operator.suffix !== \"list-item\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvalue = (field === \"title\") ? title : tiddler.getFieldString(field);\n\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/each.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/eachday.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/eachday.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editiondescription.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/editiondescription.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editions.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/editions.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/field.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/field.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/fields.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/fields.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/get.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/get.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getindex.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/getindex.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/has.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand) || tiddler.fields[operator.operand] === \"\"))) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && tiddler.fields[operator.operand] !== \"\") {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/has.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/haschanged.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/haschanged.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/indexes.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/indexes.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/is/current.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/current.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/image.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/image.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/missing.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/missing.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/orphan.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/orphan.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/shadow.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/shadow.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/system.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/system.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tag.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/tag.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/tiddler.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tvar isFilterOperator = isFilterOperators[operator.operand];\n\tif(isFilterOperator) {\n\t\treturn isFilterOperator(source,operator.prefix,options);\n\t} else {\n\t\treturn [\"Filter Error: Unknown operand for the 'is' filter operator\"];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/limit.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/limit.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/links.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/links.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/list.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/list.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listed.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/listed.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listops.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
            "title": "$:/core/modules/filters/listops.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/modules.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/modules.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/moduletypes.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/moduletypes.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/next.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/next.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/plugintiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/plugintiddlers.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/prefix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/prefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/previous.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/previous.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/regexp.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/regexp.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removeprefix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/removeprefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removesuffix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/removesuffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sameday.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tvar isSameDay = function(dateField) {\n\t\t\treturn (new Date(dateField)).setHours(0,0,0,0) === targetDate;\n\t\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tif(isSameDay($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/sameday.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/search.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffix) {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: operator.suffix\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/search.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/shadowsource.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/shadowsource.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sort.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/sort.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/splitbefore.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/splitbefore.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/storyviews.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/storyviews.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/suffix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/suffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tag.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && !tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tag.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tagging.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tagging.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tags.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tags.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/title.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/title.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/untagged.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/untagged.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/wikiparserrules.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(exp.types[operator.operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/wikiparserrules.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/x-listops.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n    /*jslint node: true, browser: true */\n    /*global $tw: false */\n    \"use strict\";\n\n    /*\n    Fetch titles from the current list\n    */\n    var prepare_results = function (source) {\n    var results = [];\n        source(function (tiddler, title) {\n            results.push(title);\n        });\n        return results;\n    };\n\n    /*\n    Moves a number of items from the tail of the current list before the item named in the operand\n    */\n    exports.putbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1;\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list after the item named in the operand\n    */\n    exports.putafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1;\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Replaces the item named in the operand with a number of items from the tail of the current list\n    */\n    exports.replace = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1;\n        return (index === -1) ?\n            results.slice(0, -count) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list to the head of the list\n    */\n    exports.putfirst = function (source, operator) {\n        var results = prepare_results(source),\n            count = parseInt(operator.suffix) || 1;\n        return results.slice(-count).concat(results.slice(0, -count));\n    };\n\n    /*\n    Moves a number of items from the head of the current list to the tail of the list\n    */\n    exports.putlast = function (source, operator) {\n        var results = prepare_results(source),\n            count = parseInt(operator.suffix) || 1;\n        return results.slice(count).concat(results.slice(0, count));\n    };\n\n    /*\n    Moves the item named in the operand a number of places forward or backward in the list\n    */\n    exports.move = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1,\n            marker = results.splice(index, 1);\n        return results.slice(0, index + count).concat(marker).concat(results.slice(index + count));\n    };\n\n    /*\n    Returns the items from the current list that are after the item named in the operand\n    */\n    exports.allafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index === -1 || index > (results.length - 2)) ? [] :\n            (operator.suffix) ? results.slice(index) :\n            results.slice(index + 1);\n    };\n\n    /*\n    Returns the items from the current list that are before the item named in the operand\n    */\n    exports.allbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index <= 0) ? [] :\n            (operator.suffix) ? results.slice(0, index + 1) :\n            results.slice(0, index);\n    };\n\n    /*\n    Appends the items listed in the operand array to the tail of the current list\n    */\n    exports.append = function (source, operator) {\n        var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || append.length;\n        return (append.length === 0) ? results :\n            (operator.prefix) ? results.concat(append.slice(-count)) :\n            results.concat(append.slice(0, count));\n    };\n\n    /*\n    Prepends the items listed in the operand array to the head of the current list\n    */\n    exports.prepend = function (source, operator) {\n        var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || prepend.length;\n        return (prepend.length === 0) ? results :\n            (operator.prefix) ? prepend.slice(-count).concat(results) :\n            prepend.slice(0, count).concat(results);\n    };\n\n    /*\n    Returns all items from the current list except the items listed in the operand array\n    */\n    exports.remove = function (source, operator) {\n        var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || array.length,\n            p,\n            len,\n            index;\n        len = array.length - 1;\n        for (p = 0; p < count; ++p) {\n            if (operator.prefix) {\n                index = results.indexOf(array[len - p]);\n            } else {\n                index = results.indexOf(array[p]);\n            }\n            if (index !== -1) {\n                results.splice(index, 1);\n            }\n        }\n        return results;\n    };\n\n    /*\n    Returns all items from the current list sorted in the order of the items in the operand array\n    */\n    exports.sortby = function (source, operator) {\n        var results = prepare_results(source);\n        if (!results || results.length < 2) {\n            return results;\n        }\n        var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n        results.sort(function (a, b) {\n            return lookup.indexOf(a) - lookup.indexOf(b);\n        });\n        return results;\n    };\n\n    /*\n    Removes all duplicate items from the current list\n    */\n    exports.unique = function (source, operator) {\n        var results = prepare_results(source);\n        var set = results.reduce(function (a, b) {\n            if (a.indexOf(b) < 0) {\n                a.push(b);\n            }\n            return a;\n        }, []);\n        return set;\n    };\n})();\n",
            "title": "$:/core/modules/filters/x-listops.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar operator, operand, bracketPos, curlyBracketPos;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tvar nextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\t\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow \"Syntax error in filter expression\";\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [\"Filter error: \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter\",function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
            "title": "$:/core/modules/filters.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/info/platform.js": {
            "text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\treturn infoTiddlerFields;\n};\n\n})();\n",
            "title": "$:/core/modules/info/platform.js",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/core/modules/language.js": {
            "text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
            "title": "$:/core/modules/language.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/macros/changecount.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
            "title": "$:/core/modules/macros/changecount.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/contrastcolour.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
            "title": "$:/core/modules/macros/contrastcolour.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/csvtiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
            "title": "$:/core/modules/macros/csvtiddlers.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/dumpvariables.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/dumpvariables.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to dump all active variable values\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"dumpvariables\";\n\nexports.params = [\n];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\tvar output = [\"|!Variable |!Value |\"],\n\t\tvariables = [], variable;\n\tfor(variable in this.variables) {\n\t\tvariables.push(variable);\n\t}\n\tvariables.sort();\n\tfor(var index=0; index<variables.length; index++) {\n\t\tvar variable = variables[index];\n\t\toutput.push(\"|\" + variable + \" |<input size=50 value=<<\" + variable + \">>/> |\")\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n",
            "title": "$:/core/modules/macros/dumpvariables.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\tvar tiddlers = this.wiki.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/jsontiddlers.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/makedatauri.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert the content of a tiddler to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\treturn $tw.utils.makeDataUri(text,type);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/makedatauri.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/now.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
            "title": "$:/core/modules/macros/now.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/qualify.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
            "title": "$:/core/modules/macros/qualify.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/resolvepath.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/resolvepath.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/version.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
            "title": "$:/core/modules/macros/version.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/parsers/audioparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/audioparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/csvparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/csvparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/htmlparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"sandbox\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/htmlparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/imageparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.tag = \"embed\";\n\t\t}\n\t} else if(text) {\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t\t\telement.tag = \"embed\";\n\t\t} else if(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"application/pdf\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/imageparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/utils/parseutils.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for an indirect value\n\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\tif(indirectValue) {\n\t\t\t\tpos = indirectValue.end;\n\t\t\t\tnode.type = \"indirect\";\n\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for a unquoted value\n\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\tif(unquotedValue) {\n\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/parseutils.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/parsers/textparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/textparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/videoparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/mp4\"] = AudioParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/videoparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/dash.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"&ndash;\" : \"&mdash;\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/entity.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: &copy;\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/extlink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: http://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|'\"\\\\^~]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/heading.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/html.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/html.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/image.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[http://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [http://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [http://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|http://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/image.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/list.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/list.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /(\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[http://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|http://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/rules.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/syslink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?\\$:\\/[a-zA-Z0-9/.\\-_]+/mg;\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/table.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/table.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n  <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/wikiparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined  && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t//  Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t//  Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,nextMatch.matchIndex)});\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,terminatorMatch.index)});\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,inlineRuleMatch.matchIndex)});\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/pluginswitcher.js": {
            "text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
            "title": "$:/core/modules/pluginswitcher.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/saver-handler.js": {
            "text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tthis.numChanges = 0;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(callback) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\tcallback(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert(\"Error while saving:\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
            "title": "$:/core/modules/saver-handler.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/savers/andtidwiki.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text);\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/andtidwiki.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/download.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\tfilename = document.location.pathname.substr(p+1);\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tlink.setAttribute(\"target\",\"_blank\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/download.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/fsosaver.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/fsosaver.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/manualdownload.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/manualdownload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/msdownload.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/msdownload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyfox.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/tiddlyfox.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyie.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/tiddlyie.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/twedit.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback(\"Error saving to TWEdit: \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
            "title": "$:/core/modules/savers/twedit.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/upload.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; ;charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback(\"Error:\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/upload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/browser-messaging.js": {
            "text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\"),\n\t\t\tiframeInfo = {\n\t\t\t\turl: url,\n\t\t\t\tstatus: \"loading\",\n\t\t\t\tdomNode: iframe\n\t\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert(\"Error loading plugin library: \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert(\"Error loading plugin library: \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\tconsole.log(\"browser-messaging: \",document.location.toString())\n\t\tconsole.log(\"browser-messaging: Received message from\",event.origin);\n\t\tconsole.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
            "title": "$:/core/modules/browser-messaging.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/commands.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/commands.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/favicon.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/startup/favicon.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/info.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/info.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/load-modules.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/load-modules.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/password.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
            "title": "$:/core/modules/startup/password.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/render.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar DRAFT_TIDDLER_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n\t})();\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only drafts have changed\n\t\tvar onlyDraftsHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !tiddler.hasField(\"draft.of\")) {\n\t\t\t\tonlyDraftsHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyDraftsHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = DRAFT_TIDDLER_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
            "title": "$:/core/modules/startup/render.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/rootwidget.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the notification  mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param);\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tif(document[fullscreen._fullscreenElement]) {\n\t\t\t\tdocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/startup/rootwidget.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t}\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-US\"\n\t\t]\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget = new widget.widget({\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},{\n\t\t\twiki: $tw.wiki,\n\t\t\tdocument: document\n\t\t});\n\t}\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t} \n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({wiki: $tw.wiki, dirtyTracking: !$tw.syncadaptor});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/startup.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/story.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers();\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permalink\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permaview\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// If a target tiddler was specified add it to the history stack\n\tif(target && target !== \"\") {\n\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t}\n\t\t$tw.wiki.addToHistory(target);\n\t} else if(storyList.length > 0) {\n\t\t$tw.wiki.addToHistory(storyList[0]);\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\tif(options.updateAddressBar !== \"no\") {\n\t\t// Get the story and the history stack\n\t\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\t\ttargetTiddler = \"\";\n\t\tif(options.targetTiddler) {\n\t\t\ttargetTiddler = options.targetTiddler;\n\t\t} else {\n\t\t\t// The target tiddler is the one at the top of the stack\n\t\t\tif(historyList.length > 0) {\n\t\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t\t}\n\t\t\t// Blank the target tiddler if it isn't present in the story\n\t\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\t\ttargetTiddler = \"\";\n\t\t\t}\n\t\t}\n\t\t// Assemble the location hash\n\t\tif(options.updateAddressBar === \"permalink\") {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t} else {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t}\n\t\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\t\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\t\tif(options.updateHistory === \"yes\") {\n\t\t\t\t// Assign the location hash so that history is updated\n\t\t\t\twindow.location.hash = $tw.locationHash;\n\t\t\t} else {\n\t\t\t\t// We use replace so that browser history isn't affected\n\t\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t\t}\n\t\t}\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/startup/story.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/windows.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = title;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{document: $tw.fakeDocument, variables: variables}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
            "title": "$:/core/modules/startup/windows.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/story.js": {
            "text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
            "title": "$:/core/modules/story.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/storyviews/classic.js": {
            "text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"translateX(0px)\"},\n\t\t{marginBottom:  currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
            "title": "$:/core/modules/storyviews/classic.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/pop.js": {
            "text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
            "title": "$:/core/modules/storyviews/pop.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/zoomin.js": {
            "text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx =  zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty =  zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
            "title": "$:/core/modules/storyviews/zoomin.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/syncer.js": {
            "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.syncadaptor = options.syncadaptor;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\"));\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\tself.handleLazyLoadEvent(title);\n\t});\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nConstants\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t};\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(\"Error retrieving skinny tiddler list:\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Queue up a sync task to load this tiddler\n\tthis.enqueueSyncTask({\n\t\ttype: \"load\",\n\t\ttitle: title\n\t});\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: \"Login to TiddlySpace\",\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tif(!$tw.utils.hop(this.tiddlerInfo,task.title)) {\n\t\tthis.tiddlerInfo[task.title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1\n\t\t};\n\t}\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif(this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
            "title": "$:/core/modules/syncer.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/tiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = [];\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\n/*\nCompare two tiddlers for equality\ntiddler: the tiddler to compare\nexcludeFields: array of field names to exclude from the comparison\n*/\nexports.isEqual = function(tiddler,excludeFields) {\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\treturn false;\n\t}\n\texcludeFields = excludeFields || [];\n\tvar self = this,\n\t\tdifferences = []; // Fields that have differences\n\t// Add to the differences array\n\tfunction addDifference(fieldName) {\n\t\t// Check for this field being excluded\n\t\tif(excludeFields.indexOf(fieldName) === -1) {\n\t\t\t// Save the field as a difference\n\t\t\t$tw.utils.pushTop(differences,fieldName);\n\t\t}\n\t}\n\t// Returns true if the two values of this field are equal\n\tfunction isFieldValueEqual(fieldName) {\n\t\tvar valueA = self.fields[fieldName],\n\t\t\tvalueB = tiddler.fields[fieldName];\n\t\t// Check for identical string values\n\t\tif(typeof(valueA) === \"string\" && typeof(valueB) === \"string\" && valueA === valueB) {\n\t\t\treturn true;\n\t\t}\n\t\t// Check for identical array values\n\t\tif($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise the fields must be different\n\t\treturn false;\n\t}\n\t// Compare our fields\n\tfor(var fieldName in this.fields) {\n\t\tif(!isFieldValueEqual(fieldName)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// There's a difference for every field in the other tiddler that we don't have\n\tfor(fieldName in tiddler.fields) {\n\t\tif(!(fieldName in this.fields)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// Return whether there were any differences\n\treturn differences.length === 0;\n};\n\n})();\n",
            "title": "$:/core/modules/tiddler.js",
            "type": "application/javascript",
            "module-type": "tiddlermethod"
        },
        "$:/core/modules/upgraders/plugins.js": {
            "text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/plugins.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/system.js": {
            "text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/system.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/themetweaks.js": {
            "text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/themetweaks.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/utils/crypto.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/utils/crypto.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/animations/slide.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/animations/slide.js",
            "type": "application/javascript",
            "module-type": "animation"
        },
        "$:/core/modules/utils/dom/animator.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/animator.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/browser.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/browser.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/csscolorparser.js": {
            "text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
            "title": "$:/core/modules/utils/dom/csscolorparser.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\ttry {\n\t\tif(window.localStorage) {\n\t\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t\t}\n\t} catch(e) {\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\ttry {\n\t\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n\t} catch(e) {\n\t\treturn \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n\n})();\n",
            "title": "$:/core/modules/utils/dom.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/http.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this.responseText,this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback(\"XMLHttpRequest error code: \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e);\n\t}\n\treturn request;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/http.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/keyboard.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"enter\": 13,\n\t\"escape\": 27\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nexports.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(\"+\"),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase();\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(namedKeys[s]) {\n\t\t\tinfo.keyCode = namedKeys[s];\n\t\t}\n\t}\n\treturn info;\n};\n\nexports.checkKeyDescriptor = function(event,keyInfo) {\n\tvar metaKeyStatus = !!keyInfo.metaKey; // Using a temporary variable to keep JSHint happy\n\treturn event.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === metaKeyStatus;\t\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/keyboard.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/modal.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = document.createElement(\"div\"),\n\t\tmodalBackdrop = document.createElement(\"div\"),\n\t\tmodalWrapper = document.createElement(\"div\"),\n\t\tmodalHeader = document.createElement(\"div\"),\n\t\theaderTitle = document.createElement(\"h3\"),\n\t\tmodalBody = document.createElement(\"div\"),\n\t\tmodalLink = document.createElement(\"a\"),\n\t\tmodalFooter = document.createElement(\"div\"),\n\t\tmodalFooterHelp = document.createElement(\"span\"),\n\t\tmodalFooterButtons = document.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.appendChild(document.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: \"Close\"\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + window.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\twindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tdocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tdocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tif($tw.pageContainer) {\n\t\t$tw.utils.toggleClass($tw.pageContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/modal.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/notifier.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{parentWidget: $tw.rootWidget, document: document, variables: variables});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/notifier.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/popup.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\t// Store the popup details if not already there\n\tif(this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode\n\t\t});\n\t}\n\t// Set the state tiddler\n\toptions.wiki.setTextReference(options.title,\n\t\t\t\"(\" + options.domNode.offsetLeft + \",\" + options.domNode.offsetTop + \",\" + \n\t\t\t\toptions.domNode.offsetWidth + \",\" + options.domNode.offsetHeight + \")\");\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/popup.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/scroller.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = $tw.utils.getScrollPosition();\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar clientBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\ttop: clientBounds.top + scrollPosition.y,\n\t\t\twidth: clientBounds.width,\n\t\t\theight: clientBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t// targetPos/targetSize - position and size of the target element\n\t// currentPos/currentSize - position and size of the current scroll viewport\n\t// returns: new position of the scroll viewport\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to it's top/left\n\t\t\tif(targetPos <= currentPos) {\n\t\t\t\tnewPos = targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\tnewPos = targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\tnewPos = targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\tnewPos = currentPos;\n\t\t\t}\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\n\t// Only scroll if the position has changed\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\twindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/scroller.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/edition-info.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/edition-info.js",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/fakedom.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text;\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value;\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this.style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this.style) {\n\t\t\t\tstyle.push(s + \":\" + this.style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\")\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get textContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get formattedTextContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
            "title": "$:/core/modules/utils/fakedom.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/filesystem.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = new Buffer(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/filesystem.js",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/logger.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName) {\n\tthis.componentName = componentName || \"\";\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\t// Prepare the text of the alert\n\tvar text = Array.prototype.join.call(arguments,\" \");\n\t// Create alert tiddlers in the browser\n\tif($tw.browser) {\n\t\t// Check if there is an existing alert with the same text and the same component\n\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\talertFields,\n\t\t\texistingCount,\n\t\t\tself = this;\n\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t}\n\t\t});\n\t\tif(alertFields) {\n\t\t\texistingCount = alertFields.count || 1;\n\t\t} else {\n\t\t\talertFields = {\n\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\ttext: text,\n\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\tcomponent: this.componentName\n\t\t\t};\n\t\t\texistingCount = 0;\n\t\t}\n\t\talertFields.modified = new Date();\n\t\tif(++existingCount > 1) {\n\t\t\talertFields.count = existingCount;\n\t\t} else {\n\t\t\talertFields.count = undefined;\n\t\t}\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t// Log the alert as well\n\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t} else {\n\t\t// Print an orange message to the console if not in the browser\n\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
            "title": "$:/core/modules/utils/logger.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/parsetree.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
            "title": "$:/core/modules/utils/parsetree.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/performance.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap of current values of measurements\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n}\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tself.measures = {};\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m].toFixed(2) + \"ms\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments),\n\t\t\t\tvalue = self.measures[name] || 0;\n\t\t\tself.measures[name] = value + $tw.utils.timer(startTime);\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
            "title": "$:/core/modules/utils/performance.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/pluginmaker.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\nError: \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
            "title": "$:/core/modules/utils/pluginmaker.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/utils.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\tconsole.log($tw.node ? \"\\x1b[1;33m\" + text + \"\\x1b[0m\" : text);\n}\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nCheck if an array is equal by value and by reference.\n*/\nexports.isArrayEqual = function(array1,array2) {\n\tif(array1 === array2) {\n\t\treturn true;\n\t}\n\tarray1 = array1 || [];\n\tarray2 = array2 || [];\n\tif(array1.length !== array2.length) {\n\t\treturn false;\n\t}\n\treturn array1.every(function(value,index) {\n\t\treturn value === array2[index];\n\t});\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify (assumed to be free of duplicates)\n\tvalue: a single value to push or an array of values to push\n*/\nexports.pushTop = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\t// Remove any array entries that are duplicated in the new values\n\t\tif(value.length !== 0) {\n\t\t\tif(array.length !== 0) {\n\t\t\t\tif(value.length < array.length) {\n\t\t\t\t\tfor(t=0; t<value.length; t++) {\n\t\t\t\t\t\tp = array.indexOf(value[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(p,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor(t=array.length-1; t>=0; t--) {\n\t\t\t\t\t\tp = value.indexOf(array[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(t,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Push the values on top of the main array\n\t\t\tarray.push.apply(array,value);\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t\tarray.push(value);\n\t}\n\treturn array;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tObject.freeze(object);\n\tfor(key in object) {\n\t\tproperty = object[key];\n\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\tdeepFreeze(property);\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar n = Math.floor((dt.getTime()-new Date(dt.getFullYear(),0,1) + 3600000) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\",   duration:      365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\",  duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\",    duration:            24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\",   duration:                 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration:                      60 * 1000},\n\t\t{name: \"Seconds\", duration:                           1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&amp;\", < to \"&lt;\", > to \"&gt;\", \" to \"&quot;\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&amp;\").replace(/</mg,\"&lt;\").replace(/>/mg,\"&gt;\").replace(/\\\"/mg,\"&quot;\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar e = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn String.fromCharCode(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn String.fromCharCode(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/'/g, \"\\\\'\")              // single quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/[\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n    return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|'\"\\\\^~]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10);\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn (new Buffer(string64,\"base64\")).toString();\n\t}\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\t\t\n\t\tm =  r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/utils.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/widgets/action-deletefield.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {};\n\tif(this.actionField) {\n\t\tremoveFields[this.actionField] = undefined;\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t}\n\t\t});\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,removeFields,this.wiki.getCreationFields()));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-deletefield.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletetiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-deletetiddler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-listops.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags;\n\t\tthis.wiki.setText(this.target, \"tags\", undefined, $tw.utils.stringifyList(\n\t\t\tthis.wiki.filterTiddlers(tagfilter, this)));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-listops.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-navigate.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-navigate.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-sendmessage.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\")\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-sendmessage.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-setfield.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\")  || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-setfield.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/browse.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,function(tiddlerFieldsArray) {\n\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/browse.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/button.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = this.popup && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif(this.set && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(this,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n    return this.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\t$tw.popup.triggerPopup({\n\t\tdomNode: this.domNodes[0],\n\t\ttitle: this.popup,\n\t\twiki: this.wiki\n\t});\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup])) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/button.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/checkbox.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value = tiddler.fields[this.checkboxField] || this.checkboxDefault || \"\";\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag);\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tvar value = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();",
            "title": "$:/core/modules/widgets/checkbox.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/codeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/codeblock.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/count.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/count.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/dropzone.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nDropZoneWidget.prototype.enterDrag = function() {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// We count enter/leave events\n\tthis.dragEnterCount = (this.dragEnterCount || 0) + 1;\n\t// If we're entering for the first time we need to apply highlighting\n\tif(this.dragEnterCount === 1) {\n\t\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.leaveDrag = function() {\n\t// Reduce the enter count\n\tthis.dragEnterCount = (this.dragEnterCount || 0) - 1;\n\t// Remove highlighting if we're leaving externally\n\tif(this.dragEnterCount <= 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent  = function(event) {\n\tthis.enterDrag();\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag();\n};\n\nDropZoneWidget.prototype.handleDropEvent  = function(event) {\n\tthis.leaveDrag();\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Reset the enter count\n\tthis.dragEnterCount = 0;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {\n\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t});\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\tthis.importData(dataTransfer);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.importData = function(dataTransfer) {\n\t// Try each provided data type in turn\n\tfor(var t=0; t<this.importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = this.importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.convertToFields(data);\n\t\t\t\tif(!tiddlerFields.title) {\n\t\t\t\t\ttiddlerFields.title = this.wiki.generateNewTitle(\"Untitled\");\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nDropZoneWidget.prototype.importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, convertToFields: function(data) {\n\t\treturn JSON.parse(data);\n\t}},\n\t{type: \"URL\", IECompatible: true, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/plain\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"Text\", IECompatible: true, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}}\n];\n\nDropZoneWidget.prototype.handlePasteEvent  = function(event) {\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/dropzone.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-binary.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-binary.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-bitmap.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 300,\n\tDEFAULT_IMAGE_HEIGHT = 185;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\tthis.widthDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor-width\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleWidthChangeEvent\"\n\t\t}]\n\t});\n\tthis.heightDomNode = $tw.utils.domMaker(\"input\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor-height\",\n\t\teventListeners: [{\n\t\t\tname: \"change\", handlerObject: this, handlerMethod: \"handleHeightChangeEvent\"\n\t\t}]\n\t});\n\t// Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tparent.insertBefore(this.widthDomNode,nextSibling);\n\tparent.insertBefore(this.heightDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode,this.widthDomNode,this.heightDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n};\n\n/*\nNote that the bitmap editor intentionally doesn't try to refresh itself because it would be confusing to have the image changing spontaneously while editting it\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.updateSize();\n\t};\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Update the input boxes with the actual size of the canvas\n*/\nEditBitmapWidget.prototype.updateSize = function() {\n\tthis.widthDomNode.value = this.currCanvas.width;\n\tthis.heightDomNode.value = this.currCanvas.height;\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleWidthChangeEvent = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(this.widthDomNode.value,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newWidth !== this.currCanvas.width) {\n\t\tthis.changeCanvasSize(newWidth,this.currCanvas.height);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleHeightChangeEvent = function(event) {\n\t// Get the new width\n\tvar newHeight = parseInt(this.heightDomNode.value,10);\n\t// Update if necessary\n\tif(newHeight > 0 && newHeight !== this.currCanvas.height) {\n\t\tthis.changeCanvasSize(this.currCanvas.width,newHeight);\n\t}\n\t// Update the input controls\n\tthis.updateSize();\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseInt(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"),10);\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type,1.0),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-bitmap.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-text.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditTextWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditTextWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our element\n\tvar editInfo = this.getEditInfo(),\n\t\ttag = this.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tif(this.editType) {\n\t\tdomNode.setAttribute(\"type\",this.editType);\n\t}\n\tif(editInfo.value === \"\" && this.editPlaceholder) {\n\t\tdomNode.setAttribute(\"placeholder\",this.editPlaceholder);\n\t}\n\tif(this.editSize) {\n\t\tdomNode.setAttribute(\"size\",this.editSize);\n\t}\n\tif(this.editRows) {\n\t\tdomNode.setAttribute(\"rows\",this.editRows);\n\t}\n\t// Assign classes\n\tif(this.editClass) {\n\t\tdomNode.className = this.editClass;\n\t}\n\t// Set the text\n\tif(this.editTag === \"textarea\") {\n\t\tdomNode.appendChild(this.document.createTextNode(editInfo.value));\n\t} else {\n\t\tdomNode.value = editInfo.value;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n\t// Fix height\n\tthis.fixHeight();\n\t// Focus field\n\tif(this.editFocus === \"true\") {\n\t\tif(domNode.focus && domNode.select) {\n\t\t\tdomNode.focus();\n\t\t\tdomNode.select();\n\t\t}\n\t}\n};\n\n/*\nGet the tiddler being edited and current value\n*/\nEditTextWidget.prototype.getEditInfo = function() {\n\t// Get the edit value\n\tvar self = this,\n\t\tvalue,\n\t\tupdate;\n\tif(this.editIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\tupdate = function(value) {\n\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// Get the current tiddler and the field name\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t} else {\n\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\tswitch(this.editField) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\tvalue = this.editDefault;\n\t\t\t}\n\t\t}\n\t\tupdate = function(value) {\n\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\tupdateFields = {\n\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t};\n\t\t\tupdateFields[self.editField] = value;\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t};\n\t}\n\treturn {value: value, update: update};\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditTextWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editDefault = this.getAttribute(\"default\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editSize = this.getAttribute(\"size\");\n\tthis.editRows = this.getAttribute(\"rows\");\n\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",\"yes\") === \"yes\";\n\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\tthis.editFocus = this.getAttribute(\"focus\");\n\t// Get the editor element tag and type\n\tvar tag,type;\n\tif(this.editField === \"text\") {\n\t\ttag = \"textarea\";\n\t} else {\n\t\ttag = \"input\";\n\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\ttag = fieldModule.editTag;\n\t\t}\n\t\tif(fieldModule && fieldModule.editType) {\n\t\t\ttype = fieldModule.editType;\n\t\t}\n\t\ttype = type || \"text\";\n\t}\n\t// Get the rest of our parameters\n\tthis.editTag = this.getAttribute(\"tag\",tag);\n\tthis.editType = this.getAttribute(\"type\",type);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely rerender if any of our attributes have changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup ||  changedAttributes.rows) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.editTitle]) {\n\t\tthis.updateEditor(this.getEditInfo().value);\n\t\treturn true;\n\t}\n\t// Fix the height anyway in case there has been a reflow\n\tthis.fixHeight();\n\treturn false;\n};\n\n/*\nUpdate the editor with new text. This method is separate from updateEditorDomNode()\nso that subclasses can override updateEditor() and still use updateEditorDomNode()\n*/\nEditTextWidget.prototype.updateEditor = function(text) {\n\tthis.updateEditorDomNode(text);\n};\n\n/*\nUpdate the editor dom node with new text\n*/\nEditTextWidget.prototype.updateEditorDomNode = function(text) {\n\t// Replace the edit value if the tiddler we're editing has changed\n\tvar domNode = this.domNodes[0];\n\tif(!domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.document.activeElement !== domNode) {\n\t\t\tdomNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nEditTextWidget.prototype.getScrollContainer = function(el) {\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn this.document.body;\n};\n\n/*\nFix the height of textareas to fit their content\n*/\nEditTextWidget.prototype.fixHeight = function() {\n\tvar domNode = this.domNodes[0];\n\tif(this.editAutoHeight && domNode && !domNode.isTiddlyWikiFakeDom && this.editTag === \"textarea\") {\n\t\t// Resize the textarea to fit its content, preserving scroll position\n\t\t// Get the scroll container and register the current scroll position\n\t\tvar container = this.getScrollContainer(domNode),\n\t\t\tscrollTop = container.scrollTop;\n                // Measure the specified minimum height\n\t\tdomNode.style.height = this.editMinHeight;\n\t\tvar minHeight = domNode.offsetHeight;\n\t\t// Set its height to auto so that it snaps to the correct height\n\t\tdomNode.style.height = \"auto\";\n\t\t// Calculate the revised height\n\t\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,minHeight);\n\t\t// Only try to change the height if it has changed\n\t\tif(newHeight !== domNode.offsetHeight) {\n\t\t\tdomNode.style.height = newHeight + \"px\";\n\t\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t\t$tw.utils.forceLayout(domNode);\n\t\t\t// Set the container to the position we registered at the beginning\n\t\t\tcontainer.scrollTop = scrollTop;\n\t\t}\n\t}\n};\n\n/*\nHandle a dom \"input\" event\n*/\nEditTextWidget.prototype.handleInputEvent = function(event) {\n\tthis.saveChanges(this.domNodes[0].value);\n\tthis.fixHeight();\n\treturn true;\n};\n\nEditTextWidget.prototype.handleFocusEvent = function(event) {\n\tif(this.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.editFocusPopup,\n\t\t\twiki: this.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\nEditTextWidget.prototype.saveChanges = function(text) {\n\tvar editInfo = this.getEditInfo();\n\tif(text !== editInfo.value) {\n\t\teditInfo.update(text);\n\t}\n};\n\nexports[\"edit-text\"] = EditTextWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-text.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t}\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/element.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/element.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/encrypt.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/encrypt.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/entity.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar textNode = this.document.createTextNode($tw.utils.entityDecode(this.parseTreeNode.entity));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/entity.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fieldmangler.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler({title: this.mangleTitle, tags: tag});\t\t\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/fieldmangler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fields.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = row.replace(\"$name$\",fieldName);\n\t\t\t\trow = row.replace(\"$value$\",value);\n\t\t\t\trow = row.replace(\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/fields.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/image.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/image.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/importvariables.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar self = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\taddWidgetNode({\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params\n\t\t\t\t});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/importvariables.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/keyboard.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.utils.checkKeyDescriptor(event,self.keyInfo)) {\n\t\t\tself.invokeActions(this,event);\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfo = $tw.utils.parseKeyDescriptor(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/keyboard.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/link.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true;\n\t// Render the link if required\n\tif(useWikiLinks) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.linkClasses) {\n\t\tclasses.push(this.linkClasses);\n\t}\n\tclasses.push(\"tc-tiddlylink\");\n\tif(this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t}\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Set an href\n\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\",\n\t\twikiLinkText = wikiLinkTemplate.replace(\"$uri_encoded$\",encodeURIComponent(this.to));\n\twikiLinkText = wikiLinkText.replace(\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragstart\", handlerObject: this, handlerMethod: \"handleDragStartEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\nLinkWidget.prototype.handleDragStartEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\tif(this.to) {\n\t\t\t$tw.dragInProgress = true;\n\t\t\t// Set the dragging class on the element being dragged\n\t\t\t$tw.utils.addClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t\t// Create the drag image elements\n\t\t\tthis.dragImage = this.document.createElement(\"div\");\n\t\t\tthis.dragImage.className = \"tc-tiddler-dragger\";\n\t\t\tvar inner = this.document.createElement(\"div\");\n\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\tinner.appendChild(this.document.createTextNode(this.to));\n\t\t\tthis.dragImage.appendChild(inner);\n\t\t\tthis.document.body.appendChild(this.dragImage);\n\t\t\t// Astoundingly, we need to cover the dragger up: http://www.kryogenix.org/code/browser/custom-drag-image.html\n\t\t\tvar cover = this.document.createElement(\"div\");\n\t\t\tcover.className = \"tc-tiddler-dragger-cover\";\n\t\t\tcover.style.left = (inner.offsetLeft - 16) + \"px\";\n\t\t\tcover.style.top = (inner.offsetTop - 16) + \"px\";\n\t\t\tcover.style.width = (inner.offsetWidth + 32) + \"px\";\n\t\t\tcover.style.height = (inner.offsetHeight + 32) + \"px\";\n\t\t\tthis.dragImage.appendChild(cover);\n\t\t\t// Set the data transfer properties\n\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t// First the image\n\t\t\tdataTransfer.effectAllowed = \"copy\";\n\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\tdataTransfer.setDragImage(this.dragImage.firstChild,-16,-16);\n\t\t\t}\n\t\t\t// Then the data\n\t\t\tdataTransfer.clearData();\n\t\t\tvar jsonData = this.wiki.getTiddlerAsJson(this.to),\n\t\t\t\ttextData = this.wiki.getTiddlerText(this.to,\"\"),\n\t\t\t\ttitle = (new RegExp(\"^\" + $tw.config.textPrimitives.wikiLink + \"$\",\"mg\")).exec(this.to) ? this.to : \"[[\" + this.to + \"]]\";\n\t\t\t// IE doesn't like these content types\n\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\tdataTransfer.setData(\"text/plain\",title);\n\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t}\n\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\tdataTransfer.setData(\"Text\",title);\n\t\t\tevent.stopPropagation();\n\t\t} else {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\nLinkWidget.prototype.handleDragEndEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\t$tw.dragInProgress = false;\n\t\t// Remove the dragging class on the element being dragged\n\t\t$tw.utils.removeClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t// Delete the drag image element\n\t\tif(this.dragImage) {\n\t\t\tthis.dragImage.parentNode.removeChild(this.dragImage);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/link.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/linkcatcher.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(this.catchTo) {\n\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.catchMessage && this.parentWidget) {\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: this.catchMessage,\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\tif(this.catchSet) {\n\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/linkcatcher.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/list.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
            "title": "$:/core/modules/widgets/list.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/macrocall.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar text = this.getVariable(this.parseTreeNode.name || this.getAttribute(\"$name\"),{params: params}),\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/macrocall.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/navigator.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tvar storyList = this.getStoryList();\n\t// Quit if we cannot get hold of the story list\n\tif(!storyList) {\n\t\treturn;\n\t}\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(title);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(fromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(this.getAttribute(\"openLinkFromInsideRiver\",\"below\")) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,title);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Delete this tiddler\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle;\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\";\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags)\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\texistingTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\t\t\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\tvar self = this;\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\t\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\t\t\n\t}\n\treturn false;\n};\n\n// \nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(tiddlerFields));\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\t$tw.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/navigator.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/password.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/password.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/radio.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nRadio widget\n\nWill set a field to the selected value:\n\n```\n\t<$radio field=\"myfield\" value=\"check 1\">one</$radio>\n\t<$radio field=\"myfield\" value=\"check 2\">two</$radio>\n\t<$radio field=\"myfield\" value=\"check 3\">three</$radio>\n```\n\n|Parameter |Description |h\n|tiddler |Name of the tiddler in which the field should be set. Defaults to current tiddler |\n|field |The name of the field to be set |\n|value |The value to set |\n|class |Optional class name(s) |\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.radioClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(this.getValue() == this.radioValue) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.radioTitle);\n\treturn tiddler && tiddler.getFieldString(this.radioField);\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tif(this.radioClass !== \"\") {\n\t\tthis.radioClass += \" \";\n\t}\n\tthis.radioClass += \"tc-radio\";\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/radio.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/raw.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/raw.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/reveal.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = (this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTitle = this.state;\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state = this.stateTitle ? this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.readMatchState(state);\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.readMatchState(state);\n\t\t\tthis.isOpen = !this.isOpen;\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.readMatchState = function(state) {\n\tthis.isOpen = state === this.text;\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes[\"default\"] || changedAttributes.animate) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false,\n\t\t\tcurrentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\trefreshed = true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n        $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n        }});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/reveal.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/scrollable.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/scrollable.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/select.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tif(values.indexOf(select.children[i].value) != -1) {\n\t\t\t\tselect.children[i].selected = true;\n\t\t\t}\n\t\t}\n\t\t\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/select.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/set.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(!this.setValue) {\n\t\t\tvalue = $tw.utils.stringifyList(results);\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.value || changedAttributes.emptyValue ||\n\t   (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/set.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/text.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/text.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/tiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/tiddler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/transclude.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: \"Recursive transclusion error in transclude widget\"}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/transclude.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/vars.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n  <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/vars.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/view.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function() {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function() {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/view.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/widget.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\n*/\nWidget.prototype.setVariable = function(name,value,params) {\n\tthis.variables[name] = {value: value, params: params};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n*/\nWidget.prototype.getVariable = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value;\n\t\t// Substitute any parameters specified in the definition\n\t\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\t\tvalue = this.substituteVariableReferences(value);\n\t\treturn value;\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n};\n\nWidget.prototype.substituteVariableParameters = function(text,formalParams,actualParams) {\n\tif(formalParams) {\n\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\tparamInfo, paramValue;\n\t\t// Step through each of the parameters in the macro definition\n\t\tfor(var p=0; p<formalParams.length; p++) {\n\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\tparamInfo = formalParams[p];\n\t\t\tparamValue = undefined;\n\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\tnextAnonParameter++;\n\t\t\t}\n\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t}\n\t\t\t// If we've still not got a value, use the default, if any\n\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t// Replace any instances of this parameter\n\t\t\ttext = text.replace(new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(paramInfo.name) + \"\\\\$\",\"mg\"),paramValue);\n\t\t}\n\t}\n\treturn text;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.render(parent,nextSibling);\n\t});\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.refresh(changedTiddlers) || refreshed;\n\t});\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction && child.invokeAction(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
            "title": "$:/core/modules/widgets/widget.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/wiki-bulkops.js": {
            "text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nexports.renameTiddler = function(fromTitle,toTitle) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar tiddler = this.getTiddler(fromTitle);\n\t\tthis.addTiddler(new $tw.Tiddler(tiddler,{title: toTitle},this.getModificationFields()));\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar tags = (tiddler.fields.tags || []).slice(0),\n\t\t\t\tlist = (tiddler.fields.list || []).slice(0),\n\t\t\t\tisModified = false;\n\t\t\t// Rename tags\n\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\tif(title === fromTitle) {\n\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\tisModified = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// Rename lists\n\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\tif(title === fromTitle) {\n\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\tisModified = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(isModified) {\n\t\t\t\tself.addTiddler(new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields()));\n\t\t\t}\n\t\t});\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/wiki-bulkops.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/wiki.js": {
            "text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type]  || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tvar fields = {\n\t\t\tcreated: new Date()\n\t\t},\n\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\tif(creator) {\n\t\tfields.creator = creator;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tvar fields = Object.create(null),\n\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\tfields.modified = new Date();\n\tif(modifier) {\n\t\tfields.modifier = modifier;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a sorted array of tiddler titles.  Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t                        (isDescending ? y - x :  x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tvar currPos = titles.indexOf(title),\n\t\t\t\tnewPos = -1,\n\t\t\t\ttiddler = this.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,defaultData);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t});\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerData(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type || \"text/vnd.tiddlywiki\",tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTree = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"transclude\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttiddler: {\n\t\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: title}},\n\t\t\t\tisBlock: !options.parseAsInline}]}\n\t]};\n\tif(options.field) {\n\t\tparseTree.tree[0].children[0].attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTree.tree[0].children[0].attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTree.tree[0].children[0].children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTree,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tliteral: If true, searches for literal string, rather than separate search terms\n\tfield: If specified, restricts the search to the specified field\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tmatch;\n\t\tfor(var t=0; t<searchTermsRegExps.length; t++) {\n\t\t\tmatch = false;\n\t\t\tif(options.field) {\n\t\t\t\tmatch = searchTermsRegExps[t].test(tiddler.getFieldString(options.field));\n\t\t\t} else {\n\t\t\t\t// Search title, tags and body\n\t\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t\t}\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\n\t\t\t}\n\t\t\tif(!match) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,callback) {\n\tvar result = [],\n\t\toutstanding = files.length;\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t});\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,callback) {\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\t// Deserialise the file contents\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\t// Are we binary?\n\t\tif(isBinary) {\n\t\t\t// The base64 section starts after the first comma in the data URI\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttiddlerFields.text = text.substr(commaPos+1);\n\t\t\t\tcallback([tiddlerFields]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\t\tif(encryptedJson) {\n\t\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields));\n\t\t\t}\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]);\n\tif(!origTiddler) {\n\t\treturn tiddler.fields.text !== \"\";\n\t}\n\treturn tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"] || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/wiki.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/palettes/Blanca": {
            "title": "$:/palettes/Blanca",
            "name": "Blanca",
            "description": "A clean white palette to let you focus",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Blue": {
            "title": "$:/palettes/Blue",
            "name": "Blue",
            "description": "A blue theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Muted": {
            "title": "$:/palettes/Muted",
            "name": "Muted",
            "description": "Bright tiddlers on a muted background",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastLight": {
            "title": "$:/palettes/ContrastLight",
            "name": "Contrast (Light)",
            "description": "High contrast and unambiguous (light version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastDark": {
            "title": "$:/palettes/ContrastDark",
            "name": "Contrast (Dark)",
            "description": "High contrast and unambiguous (dark version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/DarkPhotos": {
            "created": "20150402111612188",
            "description": "Good with dark photo backgrounds",
            "modified": "20150402112344080",
            "name": "DarkPhotos",
            "tags": "$:/tags/Palette",
            "title": "$:/palettes/DarkPhotos",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Rocker": {
            "title": "$:/palettes/Rocker",
            "name": "Rocker",
            "description": "A dark theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarFlare": {
            "title": "$:/palettes/SolarFlare",
            "name": "Solar Flare",
            "description": "Warm, relaxing earth colours",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n    download-foreground: <<colour background>>\n    dragger-foreground: <<colour background>>\n    dropdown-background: <<colour background>>\n    modal-background: <<colour background>>\n    sidebar-foreground-shadow: <<colour background>>\n    tiddler-background: <<colour background>>\n    tiddler-border: <<colour background>>\n    tiddler-link-background: <<colour background>>\n    tab-background-selected: <<colour background>>\n        dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n    dragger-background: <<colour foreground>>\n    tab-foreground: <<colour foreground>>\n        tab-foreground-selected: <<colour tab-foreground>>\n            sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n        sidebar-tab-foreground: <<colour tab-foreground>>\n    sidebar-button-foreground: <<colour foreground>>\n    sidebar-controls-foreground: <<colour foreground>>\n    sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n    alert-muted-foreground: <<colour base01>>\n: base00\n    code-foreground: <<colour base00>>\n    message-foreground: <<colour base00>>\n    tag-foreground: <<colour base00>>\n: base0\n    sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n    muted-foreground: <<colour base1>>\n        blockquote-bar: <<colour muted-foreground>>\n        dropdown-border: <<colour muted-foreground>>\n        sidebar-muted-foreground: <<colour muted-foreground>>\n        tiddler-title-foreground: <<colour muted-foreground>>\n            site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n    modal-footer-background: <<colour base2>>\n    page-background: <<colour base2>>\n        modal-backdrop: <<colour page-background>>\n        notification-background: <<colour page-background>>\n        code-background: <<colour page-background>>\n            code-border: <<colour code-background>>\n        pre-background: <<colour page-background>>\n            pre-border: <<colour pre-background>>\n        sidebar-tab-background-selected: <<colour page-background>>\n    table-header-background: <<colour base2>>\n    tag-background: <<colour base2>>\n    tiddler-editor-background: <<colour base2>>\n    tiddler-info-background: <<colour base2>>\n    tiddler-info-tab-background: <<colour base2>>\n    tab-background: <<colour base2>>\n        dropdown-tab-background: <<colour tab-background>>\n: base3\n    alert-background: <<colour base3>>\n    message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n    alert-highlight: <<colour magenta>>\n: violet\n    external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n    tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n    external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n    primary: <<colour blue-muted>>\n        download-background: <<colour primary>>\n        tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n    modal-footer-border: <<colour tab-border>>\n    modal-header-border: <<colour tab-border>>\n    notification-border: <<colour tab-border>>\n    sidebar-tab-border: <<colour tab-border>>\n    tab-border-selected: <<colour tab-border>>\n        sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n    sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Vanilla": {
            "title": "$:/palettes/Vanilla",
            "name": "Vanilla",
            "description": "Pale and unobtrusive",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/core/readme": {
            "title": "$:/core/readme",
            "text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
        },
        "$:/core/templates/MOTW.html": {
            "title": "$:/core/templates/MOTW.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)http://tiddlywiki.com -->&#13;&#10;"
        },
        "$:/core/templates/alltiddlers.template.html": {
            "title": "$:/core/templates/alltiddlers.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
        },
        "$:/core/templates/canonical-uri-external-image": {
            "title": "$:/core/templates/canonical-uri-external-image",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-text": {
            "title": "$:/core/templates/canonical-uri-external-text",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
        },
        "$:/core/templates/css-tiddler": {
            "title": "$:/core/templates/css-tiddler",
            "text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
        },
        "$:/core/templates/exporters/CsvFile": {
            "title": "$:/core/templates/exporters/CsvFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/CsvFile}}",
            "extension": ".csv",
            "text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/JsonFile": {
            "title": "$:/core/templates/exporters/JsonFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/JsonFile}}",
            "extension": ".json",
            "text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/StaticRiver": {
            "title": "$:/core/templates/exporters/StaticRiver",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/StaticRiver}}",
            "extension": ".html",
            "text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
        },
        "$:/core/templates/exporters/StaticRiver/Content": {
            "title": "$:/core/templates/exporters/StaticRiver/Content",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<<renderContent>>\n</$importvariables>\n"
        },
        "$:/core/templates/exporters/TidFile": {
            "title": "$:/core/templates/exporters/TidFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/TidFile}}",
            "extension": ".tid",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\"><<renderContent>></$importvariables>"
        },
        "$:/core/templates/html-div-tiddler": {
            "title": "$:/core/templates/html-div-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
        },
        "$:/core/templates/html-tiddler": {
            "title": "$:/core/templates/html-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
        },
        "$:/core/templates/javascript-tiddler": {
            "title": "$:/core/templates/javascript-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
        },
        "$:/core/templates/module-tiddler": {
            "title": "$:/core/templates/module-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
        },
        "$:/core/templates/plain-text-tiddler": {
            "title": "$:/core/templates/plain-text-tiddler",
            "text": "<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/save/all": {
            "title": "$:/core/save/all",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/empty": {
            "title": "$:/core/save/empty",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-all": {
            "title": "$:/core/save/lazy-all",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-images": {
            "title": "$:/core/save/lazy-images",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/templates/single.tiddler.window": {
            "title": "$:/core/templates/single.tiddler.window",
            "text": "<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"tempCurrentTiddler\" value=<<currentTiddler>>>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=<<tempCurrentTiddler>>>\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</$importvariables>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n"
        },
        "$:/core/templates/split-recipe": {
            "title": "$:/core/templates/split-recipe",
            "text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
        },
        "$:/core/templates/static-tiddler": {
            "title": "$:/core/templates/static-tiddler",
            "text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
        },
        "$:/core/templates/static.area": {
            "title": "$:/core/templates/static.area",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
        },
        "$:/core/templates/static.content": {
            "title": "$:/core/templates/static.content",
            "type": "text/vnd.tiddlywiki",
            "text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|http://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
        },
        "$:/core/templates/static.template.css": {
            "title": "$:/core/templates/static.template.css",
            "text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
        },
        "$:/core/templates/static.template.html": {
            "title": "$:/core/templates/static.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
        },
        "$:/core/templates/static.tiddler.html": {
            "title": "$:/core/templates/static.tiddler.html",
            "text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>\n</$importvariables>`\n</section>\n</body>\n</html>\n`"
        },
        "$:/core/templates/store.area.template.html": {
            "title": "$:/core/templates/store.area.template.html",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
        },
        "$:/core/templates/tid-tiddler": {
            "title": "$:/core/templates/tid-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/tiddler-metadata": {
            "title": "$:/core/templates/tiddler-metadata",
            "text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
        },
        "$:/core/templates/tiddlywiki5.html": {
            "title": "$:/core/templates/tiddlywiki5.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\t\t<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}\n</div>\n</body>\n</html>\n"
        },
        "$:/core/templates/version": {
            "title": "$:/core/templates/version",
            "text": "<<version>>"
        },
        "$:/core/templates/wikified-tiddler": {
            "title": "$:/core/templates/wikified-tiddler",
            "text": "<$transclude />"
        },
        "$:/core/ui/AboveStory/tw2-plugin-check": {
            "title": "$:/core/ui/AboveStory/tw2-plugin-check",
            "tags": "$:/tags/AboveStory",
            "text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter": {
            "title": "$:/core/ui/AdvancedSearch/Filter",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Filter/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n</div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Shadows": {
            "title": "$:/core/ui/AdvancedSearch/Shadows",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Shadows/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Standard": {
            "title": "$:/core/ui/AdvancedSearch/Standard",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Standard/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/System": {
            "title": "$:/core/ui/AdvancedSearch/System",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/System/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/AdvancedSearch": {
            "title": "$:/AdvancedSearch",
            "icon": "$:/core/images/advanced-search-button",
            "color": "#bbb",
            "text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
        },
        "$:/core/ui/AlertTemplate": {
            "title": "$:/core/ui/AlertTemplate",
            "text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">(count: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
        },
        "$:/core/ui/BinaryWarning": {
            "title": "$:/core/ui/BinaryWarning",
            "text": "\\define lingo-base() $:/language/BinaryWarning/\n<div class=\"tc-binary-warning\">\n\n<<lingo Prompt>>\n\n</div>\n"
        },
        "$:/core/ui/Components/tag-link": {
            "title": "$:/core/ui/Components/tag-link",
            "text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
        },
        "$:/core/ui/ControlPanel/Advanced": {
            "title": "$:/core/ui/ControlPanel/Advanced",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
            "text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Appearance": {
            "title": "$:/core/ui/ControlPanel/Appearance",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
            "text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Basics": {
            "title": "$:/core/ui/ControlPanel/Basics",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Basics/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
        },
        "$:/core/ui/ControlPanel/EditorTypes": {
            "title": "$:/core/ui/ControlPanel/EditorTypes",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/Info": {
            "title": "$:/core/ui/ControlPanel/Info",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Info/Caption}}",
            "text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/LoadedModules": {
            "title": "$:/core/ui/ControlPanel/LoadedModules",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
        },
        "$:/core/ui/ControlPanel/Modals/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
            "subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define install-plugin-button()\n<$button>\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/Install}}\"\"\">\n{{$:/language/ControlPanel/Plugins/Reinstall}}\n</$list>\n</$button>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1><$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<<install-plugin-button>>\n</div>\n</div>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"This plugin is not currently installed\"\"\">\n<em>\nThis plugin is already installed at version <$text text=<<installedVersion>>/>\n</em>\n</$list>\n</div>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$list>\n\\end\n\n\\define plugin-library-listing()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<div class=\"tc-plugin-library\">\n\n!! <$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link>\n\n//<$view field=\"url\"/>//\n\n<$transclude/>\n\n<<display-server-connection>>\n</div>\n</$list>\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<div>\n<<plugin-library-listing>>\n</div>\n\n</$importvariables>\n"
        },
        "$:/core/ui/ControlPanel/Palette": {
            "title": "$:/core/ui/ControlPanel/Palette",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Palette/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/snippets/paletteeditor}}\n\n</$reveal>\n\n"
        },
        "$:/core/ui/ControlPanel/Parsing": {
            "title": "$:/core/ui/ControlPanel/Parsing",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define parsing-inner(typeCap)\n<li>\n<$checkbox tiddler=\"\"\"$:/config/WikiParserRules/$typeCap$/$(currentTiddler)$\"\"\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> ''<$text text=<<currentTiddler>>/>'': </$checkbox>\n</li>\n\\end\n\n\\define parsing-outer(typeLower,typeCap)\n<ul>\n<$list filter=\"[wikiparserrules[$typeLower$]]\">\n<<parsing-inner typeCap:\"$typeCap$\">>\n</$list>\n</ul>\n\\end\n\n<<lingo Hint>>\n\n! <<lingo Pragma/Caption>>\n\n<<parsing-outer typeLower:\"pragma\" typeCap:\"Pragma\">>\n\n! <<lingo Inline/Caption>>\n\n<<parsing-outer typeLower:\"inline\" typeCap:\"Inline\">>\n\n! <<lingo Block/Caption>>\n\n<<parsing-outer typeLower:\"block\" typeCap:\"Block\">>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
            "text": "<<display-server-assets language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
            "text": "<<display-server-assets plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
            "text": "<<display-server-assets theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green\" style=\"background:blue;\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
            "text": "<<plugin-table language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
            "text": "<<plugin-table plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
            "text": "<<plugin-table theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage)\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1>\n''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-table(type)\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">>>\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$reveal type=\"nomatch\" text=\"\" state=\"!!list\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList={{!!list}} default=\"readme\" template=\"$:/core/ui/PluginInfo\"/>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=\"!!list\">\nNo information provided\n</$reveal>\n</div>\n</div>\n</$reveal>\n</$set>\n</$list>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
        },
        "$:/core/ui/ControlPanel/Saving": {
            "title": "$:/core/ui/ControlPanel/Saving",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Saving/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n! <<lingo TiddlySpot/Heading>>\n\n<<lingo TiddlySpot/Description>>\n\n|<<lingo TiddlySpot/UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Password>> |<$password name=\"upload\"/> |\n|<<lingo TiddlySpot/Backups>> |<<backupLink>> |\n\n''<<lingo TiddlySpot/Advanced/Heading>>''\n\n|<<lingo TiddlySpot/ServerURL>>  |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo TiddlySpot/UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo TiddlySpot/BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
        },
        "$:/core/ui/ControlPanel/Settings/AutoSave": {
            "title": "$:/core/ui/ControlPanel/Settings/AutoSave",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/AutoSave/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/AutoSave/\n\n<$link to=\"$:/config/AutoSave\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo Disabled/Description>> </$radio>\n"
        },
        "$:/core/buttonstyles/Borderless": {
            "title": "$:/core/buttonstyles/Borderless",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
            "text": "tc-btn-invisible"
        },
        "$:/core/buttonstyles/Boxed": {
            "title": "$:/core/buttonstyles/Boxed",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
            "text": "tc-btn-boxed"
        },
        "$:/core/buttonstyles/Rounded": {
            "title": "$:/core/buttonstyles/Rounded",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
            "text": "tc-btn-rounded"
        },
        "$:/core/ui/ControlPanel/Settings/CamelCase": {
            "title": "$:/core/ui/ControlPanel/Settings/CamelCase",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
            "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
            "title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n  <option value=\"above\"><<lingo \"OpenAbove\">></option>\n  <option value=\"below\"><<lingo \"OpenBelow\">></option>\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationHistory": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
            "title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/TitleLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings": {
            "title": "$:/core/ui/ControlPanel/Settings",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Settings/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ControlPanel/StoryView": {
            "title": "$:/core/ui/ControlPanel/StoryView",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
            "text": "{{$:/snippets/viewswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/Theme": {
            "title": "$:/core/ui/ControlPanel/Theme",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Theme/Caption}}",
            "text": "{{$:/snippets/themeswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/TiddlerFields": {
            "title": "$:/core/ui/ControlPanel/TiddlerFields",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/PageControls": {
            "title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars": {
            "title": "$:/core/ui/ControlPanel/Toolbars",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
            "text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/ControlPanel": {
            "title": "$:/ControlPanel",
            "icon": "$:/core/images/options-button",
            "color": "#bbb",
            "text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
        },
        "$:/core/ui/DefaultSearchResultList": {
            "title": "$:/core/ui/DefaultSearchResultList",
            "tags": "$:/tags/SearchResults",
            "caption": "{{$:/language/Search/DefaultResults/Caption}}",
            "text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
        },
        "$:/core/ui/EditTemplate/body": {
            "title": "$:/core/ui/EditTemplate/body",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n<$list filter=\"[is[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[is[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<em class=\"tc-edit\"><<lingo Hint>></em> <$button type=\"set\" set=\"$:/state/showeditpreview\" setTo=\"no\"><<lingo Preview/Button/Hide>></$button>\n\n<div class=\"tc-tiddler-preview\">\n<div class=\"tc-tiddler-preview-preview\">\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n</div>\n\n<div class=\"tc-tiddler-preview-edit\">\n<$edit field=\"text\" class=\"tc-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<em class=\"tc-edit\"><<lingo Hint>></em> <$button type=\"set\" set=\"$:/state/showeditpreview\" setTo=\"yes\"><<lingo Preview/Button/Show>></$button>\n<$edit field=\"text\" class=\"tc-edit-texteditor\" placeholder={{$:/language/EditTemplate/Body/Placeholder}}/>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/EditTemplate/controls": {
            "title": "$:/core/ui/EditTemplate/controls",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/fields": {
            "title": "$:/core/ui/EditTemplate/fields",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define new-field-inner()\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button>\n<$action-sendmessage $message=\"tm-add-field\" $name=<<name>> $value=<<value>>/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n\\end\n\n\\define new-field()\n<$set name=\"name\" value={{$:/temp/newfieldname}}>\n<$set name=\"value\" value={{$:/temp/newfieldvalue}}>\n<<new-field-inner>>\n</$set>\n</$set>\n\\end\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span>\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"$:/temp/newfieldname\">\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$list filter=\"[!is[shadow]!is[system]fields[]sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\"  variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n\n"
        },
        "$:/core/ui/EditTemplate/shadow": {
            "title": "$:/core/ui/EditTemplate/shadow",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
        },
        "$:/core/ui/EditTemplate/tags": {
            "title": "$:/core/ui/EditTemplate/tags",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\n\\end\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\"><$set name=\"backgroundColor\" value={{!!color}}><span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">&times;</$button></span>\n</$set>\n</$list>\n\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$button message=\"tm-add-tag\" param={{$:/temp/NewTagName}} set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<lingo Tags/Add/Button>>\n</$button>\n</span>\n</div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$linkcatcher set=\"$:/temp/NewTagName\" setTo=\"\" message=\"tm-add-tag\">\n<$list filter=\"[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]\">\n{{||$:/core/ui/Components/tag-link}}\n</$list>\n<hr>\n<$list filter=\"[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]\">\n{{||$:/core/ui/Components/tag-link}}\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n</$fieldmangler>\n</div>"
        },
        "$:/core/ui/EditTemplate/title": {
            "title": "$:/core/ui/EditTemplate/title",
            "tags": "$:/tags/EditTemplate",
            "text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\"/>"
        },
        "$:/core/ui/EditTemplate/type": {
            "title": "$:/core/ui/EditTemplate/type",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-popup-handle\"/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
        },
        "$:/core/ui/EditTemplate": {
            "title": "$:/core/ui/EditTemplate",
            "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key={{$:/config/shortcuts/cancel-edit-tiddler}} message=\"tm-cancel-tiddler\">\n<$keyboard key={{$:/config/shortcuts/save-tiddler}} message=\"tm-save-tiddler\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n</$list>\n</$keyboard>\n</$keyboard>\n</$set>\n</div>\n"
        },
        "$:/core/ui/Buttons/cancel": {
            "title": "$:/core/ui/Buttons/cancel",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
            "description": "{{$:/language/Buttons/Cancel/Hint}}",
            "text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/delete": {
            "title": "$:/core/ui/Buttons/delete",
            "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
            "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
            "description": "{{$:/language/Buttons/Delete/Hint}}",
            "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save": {
            "title": "$:/core/ui/Buttons/save",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
            "description": "{{$:/language/Buttons/Save/Hint}}",
            "text": "<$fieldmangler>\n<$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button>\n</$fieldmangler>\n"
        },
        "$:/core/Filters/AllTags": {
            "title": "$:/core/Filters/AllTags",
            "tags": "$:/tags/Filter",
            "filter": "[tags[]!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTags}}",
            "text": ""
        },
        "$:/core/Filters/AllTiddlers": {
            "title": "$:/core/Filters/AllTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/Drafts": {
            "title": "$:/core/Filters/Drafts",
            "tags": "$:/tags/Filter",
            "filter": "[has[draft.of]sort[title]]",
            "description": "{{$:/language/Filters/Drafts}}",
            "text": ""
        },
        "$:/core/Filters/Missing": {
            "title": "$:/core/Filters/Missing",
            "tags": "$:/tags/Filter",
            "filter": "[all[missing]sort[title]]",
            "description": "{{$:/language/Filters/Missing}}",
            "text": ""
        },
        "$:/core/Filters/Orphans": {
            "title": "$:/core/Filters/Orphans",
            "tags": "$:/tags/Filter",
            "filter": "[all[orphans]sort[title]]",
            "description": "{{$:/language/Filters/Orphans}}",
            "text": ""
        },
        "$:/core/Filters/OverriddenShadowTiddlers": {
            "title": "$:/core/Filters/OverriddenShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[shadow]]",
            "description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentSystemTiddlers": {
            "title": "$:/core/Filters/RecentSystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentSystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentTiddlers": {
            "title": "$:/core/Filters/RecentTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/ShadowTiddlers": {
            "title": "$:/core/Filters/ShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows]sort[title]]",
            "description": "{{$:/language/Filters/ShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/SystemTags": {
            "title": "$:/core/Filters/SystemTags",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTags}}",
            "text": ""
        },
        "$:/core/Filters/SystemTiddlers": {
            "title": "$:/core/Filters/SystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/TypedTiddlers": {
            "title": "$:/core/Filters/TypedTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Filters/TypedTiddlers}}",
            "text": ""
        },
        "$:/core/ui/ImportListing": {
            "title": "$:/core/ui/ImportListing",
            "text": "\\define lingo-base() $:/language/Import/\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n<table>\n<tbody>\n<tr>\n<th>\n<<lingo Listing/Select/Caption>>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>>>\n<$transclude subtiddler=<<payloadTiddler>> mode=\"block\"/>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ListItemTemplate": {
            "title": "$:/core/ui/ListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>"
        },
        "$:/core/ui/MissingTemplate": {
            "title": "$:/core/ui/MissingTemplate",
            "text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
        },
        "$:/core/ui/MoreSideBar/All": {
            "title": "$:/core/ui/MoreSideBar/All",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/All/Caption}}",
            "text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Drafts": {
            "title": "$:/core/ui/MoreSideBar/Drafts",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Drafts/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Missing": {
            "title": "$:/core/ui/MoreSideBar/Missing",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Missing/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Orphans": {
            "title": "$:/core/ui/MoreSideBar/Orphans",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Orphans/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Recent": {
            "title": "$:/core/ui/MoreSideBar/Recent",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Shadows": {
            "title": "$:/core/ui/MoreSideBar/Shadows",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Shadows/Caption}}",
            "text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/System": {
            "title": "$:/core/ui/MoreSideBar/System",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/System/Caption}}",
            "text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Tags": {
            "title": "$:/core/ui/MoreSideBar/Tags",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Tags/Caption}}",
            "text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
        },
        "$:/core/ui/MoreSideBar/Types": {
            "title": "$:/core/ui/MoreSideBar/Types",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Types/Caption}}",
            "text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
        },
        "$:/core/ui/Buttons/advanced-search": {
            "title": "$:/core/ui/Buttons/advanced-search",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
            "description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/close-all": {
            "title": "$:/core/ui/Buttons/close-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
            "description": "{{$:/language/Buttons/CloseAll/Hint}}",
            "text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/control-panel": {
            "title": "$:/core/ui/Buttons/control-panel",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
            "description": "{{$:/language/Buttons/ControlPanel/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/encryption": {
            "title": "$:/core/ui/Buttons/encryption",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
            "description": "{{$:/language/Buttons/Encryption/Hint}}",
            "text": "<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
        },
        "$:/core/ui/Buttons/export-page": {
            "title": "$:/core/ui/Buttons/export-page",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
            "description": "{{$:/language/Buttons/ExportPage/Hint}}",
            "text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
        },
        "$:/core/ui/Buttons/fold-all": {
            "title": "$:/core/ui/Buttons/fold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
            "description": "{{$:/language/Buttons/FoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/full-screen": {
            "title": "$:/core/ui/Buttons/full-screen",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
            "description": "{{$:/language/Buttons/FullScreen/Hint}}",
            "text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/home": {
            "title": "$:/core/ui/Buttons/home",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
            "description": "{{$:/language/Buttons/Home/Hint}}",
            "text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/import": {
            "title": "$:/core/ui/Buttons/import",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
            "description": "{{$:/language/Buttons/Import/Hint}}",
            "text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
        },
        "$:/core/ui/Buttons/language": {
            "title": "$:/core/ui/Buttons/language",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
            "description": "{{$:/language/Buttons/Language/Hint}}",
            "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down tc-drop-down-language-chooser\">\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$link>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/language\" text=<<currentTiddler>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/language\" text=<<currentTiddler>>>\n&nbsp;\n</$reveal>\n</span>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/core/ui/Buttons/more-page-actions",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-journal": {
            "title": "$:/core/ui/Buttons/new-journal",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
            "description": "{{$:/language/Buttons/NewJournal/Hint}}",
            "text": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=\"$(journalTags)$\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<<journalButton>>\n</$set></$set>"
        },
        "$:/core/ui/Buttons/new-tiddler": {
            "title": "$:/core/ui/Buttons/new-tiddler",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
            "description": "{{$:/language/Buttons/NewTiddler/Hint}}",
            "text": "<$button message=\"tm-new-tiddler\" tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/palette": {
            "title": "$:/core/ui/Buttons/palette",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
            "description": "{{$:/language/Buttons/Palette/Hint}}",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/refresh": {
            "title": "$:/core/ui/Buttons/refresh",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
            "description": "{{$:/language/Buttons/Refresh/Hint}}",
            "text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save-wiki": {
            "title": "$:/core/ui/Buttons/save-wiki",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
            "description": "{{$:/language/Buttons/SaveWiki/Hint}}",
            "text": "<$button message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}} tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
        },
        "$:/core/ui/Buttons/storyview": {
            "title": "$:/core/ui/Buttons/storyview",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
            "description": "{{$:/language/Buttons/StoryView/Hint}}",
            "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/view\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$link to=<<storyview>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/view\" text=<<storyview>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/view\" text=<<storyview>>>\n&nbsp;\n</$reveal>\n</span>\n<$transclude tiddler=<<icon>>/>\n<$text text=<<storyview>>/></$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/tag-manager": {
            "title": "$:/core/ui/Buttons/tag-manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
            "description": "{{$:/language/Buttons/TagManager/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/theme": {
            "title": "$:/core/ui/Buttons/theme",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
            "description": "{{$:/language/Buttons/Theme/Hint}}",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\" variable=\"themeTitle\">\n<$link to=<<themeTitle>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/theme\" text=<<themeTitle>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/theme\" text=<<themeTitle>>>\n&nbsp;\n</$reveal>\n</span>\n<$view tiddler=<<themeTitle>> field=\"name\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/unfold-all": {
            "title": "$:/core/ui/Buttons/unfold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
            "description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/PageTemplate/pagecontrols": {
            "title": "$:/core/ui/PageTemplate/pagecontrols",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$reveal>\n</$list>\n</div>\n\n"
        },
        "$:/core/ui/PageStylesheet": {
            "title": "$:/core/ui/PageStylesheet",
            "text": "<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
        },
        "$:/core/ui/PageTemplate/alerts": {
            "title": "$:/core/ui/PageTemplate/alerts",
            "tags": "$:/tags/PageTemplate",
            "text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
        },
        "$:/core/ui/PageTemplate/pluginreloadwarning": {
            "title": "$:/core/ui/PageTemplate/pluginreloadwarning",
            "tags": "$:/tags/PageTemplate",
            "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[has[plugin-type]haschanged[]!plugin-type[import]limit[1]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/PageTemplate/sidebar": {
            "title": "$:/core/ui/PageTemplate/sidebar",
            "tags": "$:/tags/PageTemplate",
            "text": "<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n\n<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n\n{{||$:/core/ui/PageTemplate/pagecontrols}}\n\n<$transclude tiddler=\"$:/core/ui/SideBarLists\" mode=\"inline\"/>\n\n</$reveal>\n\n</div>\n\n</$scrollable>"
        },
        "$:/core/ui/PageTemplate/story": {
            "title": "$:/core/ui/PageTemplate/story",
            "tags": "$:/tags/PageTemplate",
            "text": "<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
        },
        "$:/core/ui/PageTemplate/topleftbar": {
            "title": "$:/core/ui/PageTemplate/topleftbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate/toprightbar": {
            "title": "$:/core/ui/PageTemplate/toprightbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate": {
            "title": "$:/core/ui/PageTemplate",
            "text": "\\define containerClasses()\ntc-page-container tc-page-view-$(themeTitle)$ tc-language-$(languageTitle)$\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=\"\">\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}}>\n\n<$dropzone>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
        },
        "$:/core/ui/PluginInfo": {
            "title": "$:/core/ui/PluginInfo",
            "text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\nNo ''\"<$text text=<<currentTab>>/>\"'' found\n</$transclude>\n</$transclude>\n</$transclude>\n"
        },
        "$:/core/ui/SearchResults": {
            "title": "$:/core/ui/SearchResults",
            "text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
        },
        "$:/core/ui/SideBar/More": {
            "title": "$:/core/ui/SideBar/More",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/More/Caption}}",
            "text": "<div class=\"tc-more-sidebar\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/core/ui/SideBar/Open": {
            "title": "$:/core/ui/SideBar/Open",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Open/Caption}}",
            "text": "\\define lingo-base() $:/language/CloseAll/\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">&times;</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n\n</$list>\n\n<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\n"
        },
        "$:/core/ui/SideBar/Recent": {
            "title": "$:/core/ui/SideBar/Recent",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/SideBar/Tools": {
            "title": "$:/core/ui/SideBar/Tools",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/SideBarLists": {
            "title": "$:/core/ui/SideBarLists",
            "text": "<div class=\"tc-sidebar-lists\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search{$(searchTiddler)$}]\"/>\"\"\">\n{{$:/core/images/down-arrow}} {{$:/language/Search/Matches}}\n</$set>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n{{$:/core/ui/SearchResults}}\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\n\n</div>\n"
        },
        "$:/TagManager": {
            "title": "$:/TagManager",
            "icon": "$:/core/images/tag-button",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/icon/$title$\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/icon/$title$\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$title$!!icon\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define qualifyTitle(title)\n$title$$(currentTiddler)$\n\\end\n\\define toggleButton(state)\n<$reveal state=\"$state$\" type=\"match\" text=\"closed\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$state$\" type=\"match\" text=\"open\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td><$transclude tiddler=\"$:/core/ui/TagTemplate\"/></td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state=<<qualifyTitle \"$:/state/tag-manager/\">> /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal state=<<qualifyTitle \"$:/state/tag-manager/\">> type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td>\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TagTemplate": {
            "title": "$:/core/ui/TagTemplate",
            "text": "\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$set name=\"foregroundColor\" value=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">>>\n<$set name=\"backgroundColor\" value=\"\"\"$colour$\"\"\">\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-tag-label\" style=<<tag-styles>>>\n<$transclude tiddler={{!!icon}}/> <$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\"><div class=\"tc-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</$set>\n</$set>\n\\end\n\n\\define tag-body(colour,palette)\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n</span>\n\\end\n\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>"
        },
        "$:/core/ui/TiddlerFieldTemplate": {
            "title": "$:/core/ui/TiddlerFieldTemplate",
            "text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
        },
        "$:/core/ui/TiddlerFields": {
            "title": "$:/core/ui/TiddlerFields",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced": {
            "title": "$:/core/ui/TiddlerInfo/Advanced",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
            "text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Fields": {
            "title": "$:/core/ui/TiddlerInfo/Fields",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
            "text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/List": {
            "title": "$:/core/ui/TiddlerInfo/List",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/List/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Listed": {
            "title": "$:/core/ui/TiddlerInfo/Listed",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/References": {
            "title": "$:/core/ui/TiddlerInfo/References",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/References/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Tagging": {
            "title": "$:/core/ui/TiddlerInfo/Tagging",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Tools": {
            "title": "$:/core/ui/TiddlerInfo/Tools",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo": {
            "title": "$:/core/ui/TiddlerInfo",
            "text": "<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
        },
        "$:/core/ui/TopBar/menu": {
            "title": "$:/core/ui/TopBar/menu",
            "tags": "$:/tags/TopRightBar",
            "text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$reveal>\n"
        },
        "$:/core/ui/UntaggedTemplate": {
            "title": "$:/core/ui/UntaggedTemplate",
            "text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/body": {
            "title": "$:/core/ui/ViewTemplate/body",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/classic": {
            "title": "$:/core/ui/ViewTemplate/classic",
            "tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/import": {
            "title": "$:/core/ui/ViewTemplate/import",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define lingo-base() $:/language/Import/\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n{{||$:/core/ui/ImportListing}}\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/plugin": {
            "title": "$:/core/ui/ViewTemplate/plugin",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n\n{{||$:/core/ui/TiddlerInfo/Advanced/PluginInfo}}\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/subtitle": {
            "title": "$:/core/ui/ViewTemplate/subtitle",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/tags": {
            "title": "$:/core/ui/ViewTemplate/tags",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>"
        },
        "$:/core/ui/ViewTemplate/title": {
            "title": "$:/core/ui/ViewTemplate/title",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}/>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal>\n</div>"
        },
        "$:/core/ui/ViewTemplate/unfold": {
            "title": "$:/core/ui/ViewTemplate/unfold",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate": {
            "title": "$:/core/ui/ViewTemplate",
            "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$\n\\end\n\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/popup/tiddler-info\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\n"
        },
        "$:/core/ui/Buttons/clone": {
            "title": "$:/core/ui/Buttons/clone",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
            "description": "{{$:/language/Buttons/Clone/Hint}}",
            "text": "<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Clone/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close-others": {
            "title": "$:/core/ui/Buttons/close-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
            "description": "{{$:/language/Buttons/CloseOthers/Hint}}",
            "text": "<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseOthers/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close": {
            "title": "$:/core/ui/Buttons/close",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
            "description": "{{$:/language/Buttons/Close/Hint}}",
            "text": "<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Close/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/edit": {
            "title": "$:/core/ui/Buttons/edit",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
            "description": "{{$:/language/Buttons/Edit/Hint}}",
            "text": "<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Edit/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/core/ui/Buttons/export-tiddler",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
            "description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
            "text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
        },
        "$:/core/ui/Buttons/fold-bar": {
            "title": "$:/core/ui/Buttons/fold-bar",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/language/Buttons/Fold/FoldBar/Caption}}",
            "description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
            "text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
        },
        "$:/core/ui/Buttons/fold-others": {
            "title": "$:/core/ui/Buttons/fold-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
            "description": "{{$:/language/Buttons/FoldOthers/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldOthers/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/fold": {
            "title": "$:/core/ui/Buttons/fold",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
            "description": "{{$:/language/Buttons/Fold/Hint}}",
            "text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\"><$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button></$reveal><$reveal type=\"match\" state=<<folded-state>> text=\"hide\" default=\"show\"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button></$reveal>"
        },
        "$:/core/ui/Buttons/info": {
            "title": "$:/core/ui/Buttons/info",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
            "description": "{{$:/language/Buttons/Info/Hint}}",
            "text": "<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Info/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/core/ui/Buttons/more-tiddler-actions",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-here": {
            "title": "$:/core/ui/Buttons/new-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
            "description": "{{$:/language/Buttons/NewHere/Hint}}",
            "text": "\\define newHereButtonTags()\n[[$(currentTiddler)$]]\n\\end\n\\define newHereButton()\n<$button tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<newHereButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>"
        },
        "$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/core/ui/Buttons/new-journal-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
            "description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
            "text": "\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournalHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set></$set></$set>"
        },
        "$:/core/ui/Buttons/open-window": {
            "title": "$:/core/ui/Buttons/open-window",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
            "description": "{{$:/language/Buttons/OpenWindow/Hint}}",
            "text": "<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/OpenWindow/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permalink": {
            "title": "$:/core/ui/Buttons/permalink",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
            "description": "{{$:/language/Buttons/Permalink/Hint}}",
            "text": "<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permalink/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permaview": {
            "title": "$:/core/ui/Buttons/permaview",
            "tags": "$:/tags/ViewToolbar $:/tags/PageControls",
            "caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
            "description": "{{$:/language/Buttons/Permaview/Hint}}",
            "text": "<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permaview/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/DefaultTiddlers": {
            "title": "$:/DefaultTiddlers",
            "text": "GettingStarted\n"
        },
        "$:/temp/advancedsearch": {
            "title": "$:/temp/advancedsearch",
            "text": ""
        },
        "$:/snippets/allfields": {
            "title": "$:/snippets/allfields",
            "text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
        },
        "$:/config/AnimationDuration": {
            "title": "$:/config/AnimationDuration",
            "text": "400"
        },
        "$:/config/AutoSave": {
            "title": "$:/config/AutoSave",
            "text": "yes"
        },
        "$:/config/BitmapEditor/Colour": {
            "title": "$:/config/BitmapEditor/Colour",
            "text": "#ff0"
        },
        "$:/config/BitmapEditor/LineWidth": {
            "title": "$:/config/BitmapEditor/LineWidth",
            "text": "3"
        },
        "$:/config/DefaultSidebarTab": {
            "title": "$:/config/DefaultSidebarTab",
            "text": "$:/core/ui/SideBar/Open"
        },
        "$:/config/Drafts/TypingTimeout": {
            "title": "$:/config/Drafts/TypingTimeout",
            "text": "400"
        },
        "$:/config/EditTemplateFields/Visibility/title": {
            "title": "$:/config/EditTemplateFields/Visibility/title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/tags": {
            "title": "$:/config/EditTemplateFields/Visibility/tags",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/text": {
            "title": "$:/config/EditTemplateFields/Visibility/text",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/creator": {
            "title": "$:/config/EditTemplateFields/Visibility/creator",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/created": {
            "title": "$:/config/EditTemplateFields/Visibility/created",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modified": {
            "title": "$:/config/EditTemplateFields/Visibility/modified",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modifier": {
            "title": "$:/config/EditTemplateFields/Visibility/modifier",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/type": {
            "title": "$:/config/EditTemplateFields/Visibility/type",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.title": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.of": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.of",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/revision": {
            "title": "$:/config/EditTemplateFields/Visibility/revision",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/bag": {
            "title": "$:/config/EditTemplateFields/Visibility/bag",
            "text": "hide"
        },
        "$:/config/EditorTypeMappings/image/gif": {
            "title": "$:/config/EditorTypeMappings/image/gif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpeg": {
            "title": "$:/config/EditorTypeMappings/image/jpeg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpg": {
            "title": "$:/config/EditorTypeMappings/image/jpg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/png": {
            "title": "$:/config/EditorTypeMappings/image/png",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/x-icon": {
            "title": "$:/config/EditorTypeMappings/image/x-icon",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
            "text": "text"
        },
        "$:/config/Navigation/UpdateAddressBar": {
            "title": "$:/config/Navigation/UpdateAddressBar",
            "text": "no"
        },
        "$:/config/Navigation/UpdateHistory": {
            "title": "$:/config/Navigation/UpdateHistory",
            "text": "no"
        },
        "$:/config/OfficialPluginLibrary": {
            "title": "$:/config/OfficialPluginLibrary",
            "tags": "$:/tags/PluginLibrary",
            "url": "http://tiddlywiki.com/library/v5.1.9/index.html",
            "caption": "{{$:/language/OfficialPluginLibrary}}",
            "text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
        },
        "$:/config/Navigation/openLinkFromInsideRiver": {
            "title": "$:/config/Navigation/openLinkFromInsideRiver",
            "text": "below"
        },
        "$:/config/Navigation/openLinkFromOutsideRiver": {
            "title": "$:/config/Navigation/openLinkFromOutsideRiver",
            "text": "top"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
            "text": "hide"
        },
        "$:/config/Performance/Instrumentation": {
            "title": "$:/config/Performance/Instrumentation",
            "text": "no"
        },
        "$:/config/SaveWikiButton/Template": {
            "title": "$:/config/SaveWikiButton/Template",
            "text": "$:/core/save/all"
        },
        "$:/config/SaverFilter": {
            "title": "$:/config/SaverFilter",
            "text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/Search/AutoFocus": {
            "title": "$:/config/Search/AutoFocus",
            "text": "true"
        },
        "$:/config/SearchResults/Default": {
            "title": "$:/config/SearchResults/Default",
            "text": "$:/core/ui/DefaultSearchResultList"
        },
        "$:/config/SyncFilter": {
            "title": "$:/config/SyncFilter",
            "text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/TiddlerInfo/Default": {
            "title": "$:/config/TiddlerInfo/Default",
            "text": "$:/core/ui/TiddlerInfo/Fields"
        },
        "$:/config/Tiddlers/TitleLinks": {
            "title": "$:/config/Tiddlers/TitleLinks",
            "text": "no"
        },
        "$:/config/Toolbar/ButtonClass": {
            "title": "$:/config/Toolbar/ButtonClass",
            "text": "tc-btn-invisible"
        },
        "$:/config/Toolbar/Icons": {
            "title": "$:/config/Toolbar/Icons",
            "text": "yes"
        },
        "$:/config/Toolbar/Text": {
            "title": "$:/config/Toolbar/Text",
            "text": "no"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
            "text": "show"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
            "text": "hide"
        },
        "$:/config/shortcuts/cancel-edit-tiddler": {
            "title": "$:/config/shortcuts/cancel-edit-tiddler",
            "text": "escape"
        },
        "$:/config/shortcuts/save-tiddler": {
            "title": "$:/config/shortcuts/save-tiddler",
            "text": "ctrl+enter"
        },
        "$:/config/WikiParserRules/Inline/wikilink": {
            "title": "$:/config/WikiParserRules/Inline/wikilink",
            "text": "enable"
        },
        "$:/snippets/currpalettepreview": {
            "title": "$:/snippets/currpalettepreview",
            "text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch(colour)\n<$set name=\"swatchColour\" value={{##$colour$}}>\n<div class=\"tc-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\">\n<<swatch foreground>>\n<<swatch background>>\n<<swatch muted-foreground>>\n<<swatch primary>>\n<<swatch page-background>>\n<<swatch tab-background>>\n<<swatch tiddler-info-background>>\n</div>\n"
        },
        "$:/snippets/download-wiki-button": {
            "title": "$:/snippets/download-wiki-button",
            "text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
        },
        "$:/language": {
            "title": "$:/language",
            "text": "$:/languages/en-GB"
        },
        "$:/snippets/languageswitcher": {
            "title": "$:/snippets/languageswitcher",
            "text": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/core/macros/CSS": {
            "title": "$:/core/macros/CSS",
            "tags": "$:/tags/Macro",
            "text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"/></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n  -webkit-box-shadow: $shadow$;\n     -moz-box-shadow: $shadow$;\n          box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n  -webkit-filter: $filter$;\n     -moz-filter: $filter$;\n          filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n  -webkit-transition: $transition$;\n     -moz-transition: $transition$;\n          transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n  -webkit-transform-origin: $origin$;\n     -moz-transform-origin: $origin$;\n          transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n"
        },
        "$:/core/macros/export": {
            "title": "$:/core/macros/export",
            "tags": "$:/tags/Macro",
            "text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
        },
        "$:/core/macros/lingo": {
            "title": "$:/core/macros/lingo",
            "tags": "$:/tags/Macro",
            "text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
        },
        "$:/core/macros/list": {
            "title": "$:/core/macros/list",
            "tags": "$:/tags/Macro",
            "text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\")\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\">\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n"
        },
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tag": {
            "title": "$:/core/macros/tag",
            "tags": "$:/tags/Macro",
            "text": "\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
        },
        "$:/core/macros/thumbnails": {
            "title": "$:/core/macros/thumbnails",
            "tags": "$:/tags/Macro",
            "text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
        },
        "$:/core/macros/timeline": {
            "created": "20141212105914482",
            "modified": "20141212110330815",
            "tags": "$:/tags/Macro",
            "title": "$:/core/macros/timeline",
            "type": "text/vnd.tiddlywiki",
            "text": "\\define timeline-title()\n<!-- Override this macro with a global macro \n     of the same name if you need to change \n     how titles are displayed on the timeline \n     -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}>\n<<timeline-title>>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
        },
        "$:/core/macros/toc": {
            "title": "$:/core/macros/toc",
            "tags": "$:/tags/Macro",
            "text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$set>\n\\end\n\n\\define toc-body(rootTag,tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc\">\n<$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\"\"\">\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n<<toc-caption>>\n</$list>\n<$list filter=\"\"\"[all[current]] -[[$rootTag$]]\"\"\">\n<$macrocall $name=\"toc-body\" rootTag=\"\"\"$rootTag$\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$list>\n</li>\n</$set>\n</$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter)\n<<toc-body rootTag:\"\"\"$tag$\"\"\" tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc toc-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<<toc-linked-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>\">\n<<toc-unlinked-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n</$list>\n</$list>\n</ol>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</$list>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"$:/state/toc/$tag$-$(currentTiddler)$\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n</$list>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"\"\"toc-selective-expandable\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc toc-selective-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=\"<<toc-linked-selective-expandable-body tag:'$tag$' sort:'$sort$' itemClassFilter:'$itemClassFilter$'>>\">\n<<toc-unlinked-selective-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"$itemClassFilter$\"\"\">>\n</$list>\n</$list>\n</ol>\n\\end\n\n\\define toc-tabbed-selected-item-filter(selectedTiddler)\n[all[current]field:title{$selectedTiddler$}]\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{$selectedTiddler$}}>\n<div class=\"tc-tabbed-table-of-contents\">\n<$linkcatcher to=\"$selectedTiddler$\">\n<div class=\"tc-table-of-contents\">\n<$macrocall $name=\"toc-selective-expandable\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=<<toc-tabbed-selected-item-filter selectedTiddler:\"\"\"$selectedTiddler$\"\"\">>/>\n</div>\n</$linkcatcher>\n<div class=\"tc-tabbed-table-of-contents-content\">\n<$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"nomatch\" text=\"\">\n<$transclude mode=\"block\" tiddler=\"$template$\">\n<h1><<toc-caption>></h1>\n<$transclude mode=\"block\">$missingText$</$transclude>\n</$transclude>\n</$reveal>\n<$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"match\" text=\"\">\n$unselectedText$\n</$reveal>\n</div>\n</div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=\"\"\"$selectedTiddler$\"\"\">\n<$macrocall $name=\"toc-tabbed-external-nav\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" selectedTiddler=\"\"\"$selectedTiddler$\"\"\" unselectedText=\"\"\"$unselectedText$\"\"\" missingText=\"\"\"$missingText$\"\"\" template=\"\"\"$template$\"\"\"/>\n</$linkcatcher>\n\\end\n\n"
        },
        "$:/snippets/minilanguageswitcher": {
            "title": "$:/snippets/minilanguageswitcher",
            "text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/minithemeswitcher": {
            "title": "$:/snippets/minithemeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/modules": {
            "title": "$:/snippets/modules",
            "text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
        },
        "$:/palette": {
            "title": "$:/palette",
            "text": "$:/palettes/Vanilla"
        },
        "$:/snippets/paletteeditor": {
            "title": "$:/snippets/paletteeditor",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<table>\n<tbody>\n<$list filter=\"[all[current]indexes[]]\" variable=\"colourName\">\n<tr>\n<td>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<$edit-text index=<<colourName>> tag=\"input\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n</$set>\n"
        },
        "$:/snippets/palettepreview": {
            "title": "$:/snippets/palettepreview",
            "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n<$transclude tiddler=\"$:/snippets/currpalettepreview\"/>\n</$set>\n"
        },
        "$:/snippets/paletteswitcher": {
            "title": "$:/snippets/paletteswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n<div class=\"tc-prompt\">\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n</div>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[description]]\"><div class=\"tc-chooser-item\"><$link to={{!!title}}><div><$reveal state=\"$:/palette\" type=\"match\" text={{!!title}}>&bull;</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}>&nbsp;</$reveal> ''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/></div><$transclude tiddler=\"$:/snippets/currpalettepreview\"/></$link></div>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/temp/search": {
            "title": "$:/temp/search",
            "text": ""
        },
        "$:/tags/AdvancedSearch": {
            "title": "$:/tags/AdvancedSearch",
            "list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
        },
        "$:/tags/ControlPanel": {
            "title": "$:/tags/ControlPanel",
            "list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
        },
        "$:/tags/ControlPanel/Info": {
            "title": "$:/tags/ControlPanel/Info",
            "list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
        },
        "$:/tags/ControlPanel/Plugins": {
            "title": "$:/tags/ControlPanel/Plugins",
            "list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
        },
        "$:/tags/EditTemplate": {
            "title": "$:/tags/EditTemplate",
            "list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
        },
        "$:/tags/EditToolbar": {
            "title": "$:/tags/EditToolbar",
            "list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
        },
        "$:/tags/MoreSideBar": {
            "title": "$:/tags/MoreSideBar",
            "list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]]",
            "text": ""
        },
        "$:/tags/PageControls": {
            "title": "$:/tags/PageControls",
            "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
        },
        "$:/tags/PageTemplate": {
            "title": "$:/tags/PageTemplate",
            "list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
            "text": ""
        },
        "$:/tags/SideBar": {
            "title": "$:/tags/SideBar",
            "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo": {
            "title": "$:/tags/TiddlerInfo",
            "list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo/Advanced": {
            "title": "$:/tags/TiddlerInfo/Advanced",
            "list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
        },
        "$:/tags/ViewTemplate": {
            "title": "$:/tags/ViewTemplate",
            "list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
        },
        "$:/tags/ViewToolbar": {
            "title": "$:/tags/ViewToolbar",
            "list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
        },
        "$:/snippets/themeswitcher": {
            "title": "$:/snippets/themeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>&bull;</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}>&nbsp;</$reveal> <$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
        },
        "$:/core/wiki/title": {
            "title": "$:/core/wiki/title",
            "type": "text/vnd.tiddlywiki",
            "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
        },
        "$:/view": {
            "title": "$:/view",
            "text": "classic"
        },
        "$:/snippets/viewswitcher": {
            "title": "$:/snippets/viewswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/StoryView/\n<<lingo Prompt>> <$select tiddler=\"$:/view\">\n<$list filter=\"[storyviews[]]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>"
        }
    }
}
/*\
title: $:/core/modules/parsers/wikiparser/rules/wikilink.js
type: application/javascript
module-type: wikirule

Wiki text inline rule for wiki links. For example:

```
AWikiLink
AnotherLink
~SuppressedLink
```

Precede a camel case word with `~` to prevent it from being recognised as a link.

\*/
(function(){

/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

exports.name = "wikilink";
exports.types = {inline: true};

exports.init = function(parser) {
	this.parser = parser;
	// Regexp to match
	this.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + "?" + $tw.config.textPrimitives.wikiLink,"mg");
};

/*
Parse the most recent match
*/
exports.parse = function() {
	// Get the details of the match
	var linkText = this.match[0];
	// Move past the macro call
	this.parser.pos = this.matchRegExp.lastIndex;
	// If the link starts with the unwikilink character then just output it as plain text
	if(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {
		return [{type: "text", text: linkText.substr(1)}];
	}
	// If the link has been preceded with a blocked letter then don't treat it as a link
	if(this.match.index > 0) {
		var preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,"mg");
		preRegExp.lastIndex = this.match.index-1;
		var preMatch = preRegExp.exec(this.parser.source);
		if(preMatch && preMatch.index === this.match.index-1) {
			return [{type: "text", text: linkText}];
		}
	}
	return [{
		type: "link",
		attributes: {
			to: {type: "string", value: linkText}
		},
		children: [{
			type: "text",
			text: linkText
		}]
	}];
};

})();
\define saveTiddlerFilter()
[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/status/UserName]] -[prefix[$:/state]] -[prefix:[$:/temp]] -[[$:/StoryList]] +[sort[title]]
\end
{{$:/core/templates/tiddlywiki5.html}}
<div class="tc-more-sidebar">
<<tabs "[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]" "$:/core/ui/MoreSideBar/Tags" "$:/state/tab/moresidebar" "tc-vertical">>
</div>
\define lingo-base() $:/language/CloseAll/
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" storyview="pop">

<$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class="tc-btn-invisible tc-btn-mini">&times;</$button> <$link to={{!!title}}><$view field="title"/></$link>

</$list>

<$button message="tm-close-all-tiddlers" class="tc-btn-invisible tc-btn-mini"><<lingo Button>></$button>
<$macrocall $name="timeline" format={{$:/language/RecentChanges/DateFormat}}/>
\define lingo-base() $:/language/ControlPanel/
\define config-title()
$:/config/PageControlButtons/Visibility/$(listItem)$
\end

<<lingo Basics/Version/Prompt>> <<version>>

<$set name="tv-config-toolbar-icons" value="yes">

<$set name="tv-config-toolbar-text" value="yes">

<$set name="tv-config-toolbar-class" value="">

<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">

<div style="position:relative;">

<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>

</div>

</$list>

</$set>

</$set>

</$set>
\define title-styles()
fill:$(foregroundColor)$;
\end
\define config-title()
$:/config/ViewToolbarButtons/Visibility/$(listItem)$
\end
<div class="tc-tiddler-title">
<div class="tc-titlebar">
<span class="tc-tiddler-controls">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]" variable="listItem"><$reveal type="nomatch" state=<<config-title>> text="hide"><$transclude tiddler=<<listItem>>/></$reveal></$list>
</span>
<$set name="tv-wikilinks" value={{$:/config/Tiddlers/TitleLinks}}>
<$link>
<$set name="foregroundColor" value={{!!color}}>
<span class="tc-tiddler-title-icon" style=<<title-styles>>>
<$transclude tiddler={{!!icon}}/>
</span>
</$set>
<$list filter="[all[current]removeprefix[$:/]]">
<h2 class="tc-title" title={{$:/language/SystemTiddler/Tooltip}}>
<span class="tc-system-title-prefix">$:/</span><$text text=<<currentTiddler>>/>
</h2>
</$list>
<$list filter="[all[current]!prefix[$:/]]">
<h2 class="tc-title"><i>
<$view field="caption"/>
</i></h2>
<span style="font-size:0.6em;"><$view field="auktor"/></span>
</$list>
</$link>
</$set>
</div>

<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState>> class="tc-tiddler-info tc-popup-handle" animate="yes" retain="yes">

<$transclude tiddler="$:/core/ui/TiddlerInfo"/>

</$reveal>
</div>
HelloThere
AAABAAIAEBAAAAEAIAAoBQAAJgAAACAgAAABACAAKBQAAE4FAAAoAAAAEAAAACAAAAABACAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANVwRyvZclKP2HJS1dlyUvPZclLz2HJS1dlyUo/VcEcrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqioqBtdxUJTegWT94pJ4/+emkf/01Mr/3Hpb/9t1Vf/oppL/+OTe/vDHvMeqKioGAAAAAAAAAAAAAAAAqioqBtlyUr3cfV7/+u/r//Xb0v/57ej/5JZ8/9t1Vf/bdVX/+/Tx//rw7P/bdlb/2XJSvaoqKgYAAAAAAAAAANdxUJTbdVX/7Lal////////////6aya/9t1Vf/bdVX/23VV//nr5v/xyb3/23VV/9t1Vf/XcVCUAAAAANVwRyvadFT923VV/+SWff///////////+6/r//bd1f/3oJm/+CIbP/++/v/89LI/9t1Vf/bdVX/2nRU/dVwRyvZclKP23VV/9t1Vf/bdVX/9NbL///////+/Pz//v7+///////////////////////01Mr/3Hlb/9t1Vf/ZclKP2HJS1dt1Vf/bdVX/3oFi//v08f////////////////////////////////////////////LNw//ln4j/2HJS1dlyUvPklnz/7Lel//LLv////////////////////////////////////////////////////////fv6/9yFZvTruKb48ci7/+msmv/stqX/+OPc//////////////////318//99vP//fr5//vy7//////////////////lpZH37b+v6tt1Vf/bdVX/23VV/9t1Vf/hjnT/5JZ+/9+Faf/bdVX/23VV/9t1Vf/ik3r/////////////////7Lin5+qxn7HbdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/3Hlb//fi3P/ilHz/4Yxy/+y4qLbVcEcr2nRU/dt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9p0VP3VcEcrAAAAANdxUJTbdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/XcVCUAAAAAAAAAACqKioG2XJSvdt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/ZclK9qioqBgAAAAAAAAAAAAAAAKoqKgbXcVCU2nRU/dt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9p0VP3XcVCUqioqBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANVwRyvZclKP2HJS1dlyUvPZclLz2HJS1dlyUo/VcEcrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoqKgbXb09H2XJQldhyUr/YdFPZ2XJS89lyUvPYdFPZ2HJSv9lyUJXXb09HqioqBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMlqShjZc1GW2HJT8dt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/YclPx2XNRlslqShgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJFIJAfZc1KC2HJT9Nt1Vf/bdVX/23VV/9t1Vf/fhmr/6q2b/+mtmv/ceFr/23VV/9t1Vf/bdVX/23VV/9t1Vf/qsJ3//PPx/v38+/rz7+tBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJakoY2XJTx9t1Vf/bdVX/6aya//HIvP/moIv/5qGM//35+P///////////+GPdf/bdVX/23VV/9t1Vf/xxrn/+vDs//79/f//////89LI/9p3V8jJakoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzW5ILtlyUuPbdVX/23VV/+6/r///////8MS2//LNwv/+/Pz//v7+//PSyP/moIr/23VV/9t1Vf/bdVX/23VV//nq5f////////////z39f/cfV7/23VV/9lyUuPXcUktAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMlqShjZclLj23VV/9t1Vf/kln7////////////018/////////////qr5v/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/+Obf////////////8sq9/9t1Vf/bdVX/23VV/9lyUuPJakoYAAAAAAAAAAAAAAAAAAAAAAAAAACRSCQH2XJTx9t1Vf/bdVX/23VV//bf2P//////////////////////+erl/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/129P////////////lnof/23VV/9t1Vf/bdVX/23VV/9lyU8eRSCQHAAAAAAAAAAAAAAAAAAAAANlzUoLbdVX/23VV/9t1Vf/egmT////////////////////////////23NT/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV//PSx////////////9+Ga//bdVX/23VV/9t1Vf/bdVX/23VV/9lzUoIAAAAAAAAAAAAAAADJakoY2HJT9Nt1Vf/bdVX/23VV/9t1Vf/23tX///////////////////////vz8f/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/+u7q////////////3H5f/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2HJT9MlqShgAAAAAAAAAANlzUZbbdVX/23VV/9t1Vf/bdVX/23VV/+GNc//+/f3//////////////////////+GReP/beFn/4Ilu/+KTev/lmoL/4pJ5/+ahjP/////////////////uwrX/23ZW/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2XNRlgAAAACqKioG2HJT8dt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV//LNwf///////////////////////Pf1//79/f/////////////////////////////////////////////////339j/4Idr/9t1Vf/bdVX/23VV/9t1Vf/YclPxqioqBtdvT0fbdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/4Yxy///////////////////////////////////////////////////////////////////////////////////////99vT/4Y91/9t1Vf/bdVX/23VV/9t1Vf/Xb09H2XJQldt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t2Vv/z0sj////////////////////////////////////////////////////////////////////////////////////////////23tX/23hZ/9t4Wf/bdVX/23VV/9lyUJXYclK/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/6KmV//////////////////////////////////////////////////////////////////////////////////////////////////79/f/78ez//Pf1/+Wag//bdVX/2HJSv9h0U9nbdVX/23VV/9t1Vf/bdVX/3H1e/9t4Wf/xxrn//////////////////////////////////////////////////////////////////////////////////////////////////////////////////fTy/9x/YP/YdFPZ2XJS89t1Vf/moYz/9drQ//36+f///////v39//36+f//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////67Oh/9lzUvLZdFXz89LH///////79PH/9t7V//Xb0//56+f//v39///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0187/2XJS8+u8rOv78vD/5Z6G/9t1Vf/bdVX/23VV/9t1Vf/ceVv/5Z6H//ru6P/////////////////////////////////68O3/9+Ha//nn4//68O3//Pf1//vy8P/229T/+u/r//////////////////////////////////jm3//YdFPZ+u/r9uWagv/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/3Hlb/+WfiP/uva7/8MW4/+6/r//nppH/34Zq/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/uwLH/////////////////////////////////+u7o/9hyUr/89vL023ZW/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/+emkf/////////////////////////////////99PL/2XJQlfvz8tjbdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/4Idr////////////8ci8/+qsmP/ik3r/7Lal//np4//psJ9r/Pj4dNx4WvHbdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/8s3B/+/GuP/bdVX/23VV/9t1Vf/bdVX/2HNU8f/s7DcAAAAA2XNRltt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/Zc1GWAAAAAAAAAADJakoY2HJT9Nt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2HJT9MlqShgAAAAAAAAAAAAAAADZc1KC23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/Zc1KCAAAAAAAAAAAAAAAAAAAAAJFIJAfZclPH23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2XJTx5FIJAcAAAAAAAAAAAAAAAAAAAAAAAAAAMlqShjZclLj23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9lyUuPJakoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM1uSC7ZclLj23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/ZclLj13FJLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMlqShjZclPH23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2XJTx8lqShgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJFIJAfZc1KC2HJT9Nt1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2HJT9NlzUoKRSCQHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJakoY2XNRlthyU/HbdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/23VV/9t1Vf/bdVX/2HJT8dlzUZbJakoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqioqBtdvT0fZclCV2HJSv9h0U9nZclLz2XJS89h0U9nYclK/2XJQlddvT0eqKioGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
no
$:/languages/sv-SE
{
    "tiddlers": {
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "avancerad sök"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Avancerad sök"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "avbryt"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Ångra ändringarna för denna tiddler"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "Kopiera"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Kopiera denna tiddler"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "stäng"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Stäng denna tiddler"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "stäng alla"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Stäng alla tiddlers"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "stäng andra"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Stäng alla andra tiddler"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "kontrollpanel"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Öppna kontrollpanelen"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "ta bort"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "ta bort denna tiddler"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "redigera"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Redigera denna tiddler"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "kryptering"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Ställ in eller rensa lösenordet för att kunna spara denna wiki"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "rensa lösenord"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Rensa lösenordet för att kunna spara denna wikin utan kryptering"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "ställ in lösenord"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Ställ in ett lösenord fö ratt spara denna wikin med kryptering"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "exportera alla"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Export all tiddlers"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "exportera tiddler"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Exportera tiddler"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "exportera tiddlers"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Exportera tiddlers"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "fullskärm"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Slå på/av fullskärmsläge"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "hjälp"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Show help panel"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "importera"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Importera filer"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "info"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Visa information för denna tiddler"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "hem"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Öppna standard-tiddlers"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "språk"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Välj visningsspråk"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "mer"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "Mer val"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "ny här"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Skapa en ny tiddler taggad med denna tiddlers rubrik"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "ny journal"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Skapa en ny journal-tiddler"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "ny journal här"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Skapa en ny journal-tiddler taggad med denna tiddlers rubrik"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "ny tiddler"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Skapa en ny tiddler"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "öppna i nytt fönster"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Öppna tiddler i ett nytt fönster"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "palett"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Välj färgpalett"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "permalänk"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Ställ in webbläsarens adressfält för en direktlänk till denna tiddler"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "permavy"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Ställ in webbläsarens adressfält för en direktlänk till alla tiddlers för denna artikeln"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "uppdatera"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Utför en fullständig uppdatering av wikin"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "ok"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Godkänn ändringar för denna tiddler"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "spara ändringar"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Spara ändringar"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "artikelvy"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Välj visualisering för artikelvyn"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "göm sidofält"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Göm sidofält"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "visa sidofält"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Visa sidofält"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "tagghanteraren"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Öppna tagghanteraren"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "tema"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Välj visningstema"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Avancerat"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Intern information om denna TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Utseende"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Möjlighet att ändra utseendet för din TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Varaktighet på animationer:"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Grundläggande"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Använd &#91;&#91;dubbla hakparenteser&#93;&#93; för rubriker med mellanslag. Eller kan du välja att <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">spara de öppna tiddlers</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Standard-tiddlers:"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Välj vilka tiddlers som ska visas vid uppstart:"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Hej! Nuvarande språk:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Rubriken för nya journal-tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Taggar för nya journal-tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Antal överskridna skugg-tiddlers:"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Antar skugg-tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Underrubrik:"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Antal system-tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Antal taggar:"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Antal tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Rubrik för denna ~TiddlyWiki:"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Användarnamn att signera redigeringar:"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "~TiddlyWiki version:"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Redigeringstyper"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Redigerare"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "Dessa tiddlers bestämmer vilken redigerare som används att redigera specifika tiddler-typer."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Typ"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Info"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Information om denna TiddlyWiki"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Inlästa moduler"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "Detta är de nuvarande inlästa tiddlermoduler som är länkade till sin källtiddler. Alla moduler i kursivt Alle moduler i kursiv stil saknar källtiddler, vanligtvis eftersom de sattes upp under uppstartsprocessen."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Palett"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "klona"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "Det är rekommenderat att du klona denna skugg-palett innan du redigerar den"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "Denna skugg-palett har blivit ändrad"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Redigerar"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "återställ"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "göm redigerare"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Current palett:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "visa redigerare"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Installera insticksprogram från officiella biblioteket"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Hämta fler insticksprogram"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Insticksprogram"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "inaktivera"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Inaktivera detta insticksprogram efter laddat om sidan"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(inaktiverad)"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "Inga"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "aktivera"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Aktivera detta insticksprogram efter laddat om sidan"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Nuvarande installerade insticksprogram:"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Språk"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Språkpakets-insticksprogram"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Insticksprogram"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Insticksprogram"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Teman"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Teman-Insticksprogram"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Sparar"
        },
        "$:/language/ControlPanel/Saving/Heading": {
            "title": "$:/language/ControlPanel/Saving/Heading",
            "text": "Sparar"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Avancerade Inställningar"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Backupmapp"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backuper"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "Dessa inställningar används bara när du sparar till http://tiddlyspot.com eller en kompatibel server"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Uppladdningsfilnamn"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//Serverns URL är som standard `http://<wikiname>.tiddlyspot.com/store.cgi` och kan ändras till en anpassad serveradress, t.ex. `http://example.com/store.php`.//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Lösenord"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "Server URL"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Uppladdninsmapp"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Wikinamn"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Autospara"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Sparar inte ändringar automatiskt"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Spara ändringar automatiskt"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Sparar automatiskt ändringar under redigering"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Inställningar"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "Dessa inställningar låter dig anpassa din TiddlyWikis beteende."
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Navigerings-adressfält"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Beteende för webbläsarens adressfält när du går till en tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Uppdatera inte adressfältet"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Inkludera måltiddler"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Inkludera måltiddler och nuvarande artikelsekvens"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "Navigationshistorik"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Uppdatera webbläsarhistoriken när du går till en tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Uppdatera inte historiken"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Uppdatera historiken"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Verktygsfältsknappars stil"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Välj stil för verktygsfältsknapparna"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Utan ram"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Fyrkantig"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Runda"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Verktygsfältsknappar"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Standardutseende för verktygsfältsknapparna:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Inkludera ikon"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Inkludera text"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Standard-sidofältsflik"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Ange vilken sidofältsflik som visas som standard"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Tiddlers öppningsbeteende"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "Navigera //innefrån// artikelflödet"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "Navigera //utanför// artikelflödet"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Öppna ovanför aktuell tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Öppna nedanför aktuell tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Öppna högst upp för artikelflödet"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Öppna längst ner för artikelflödet"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Tiddlerrubriker"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Ställ in att visa tiddlerrubriker som länkar"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Visa inte tiddlerrubriker som  länkar"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Visa tiddlerrubriker som länkar"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Artikelvy"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Nuvarande vy:"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Tema"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Nuvarande tema:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Tiddlerfält"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "Detta är all Tiddlerfält som används i denna wiki (inklusive system-tiddlers med undantag för skugg-tiddlers)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Verktygsfält"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "Redigera verktygsfält"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Välj vilja knappar som ska visas när man redigerar en tiddler"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Välj vilka verktygsfältsknapper som ska visas"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Sidverktygsfält"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Välj vilka knappar som visas på standardverktygsfältet  "
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "Visa verktygsfält"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Välj vilka knappar som visas för tiddlers i visningsläge"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Ladda ner fullständig wiki"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": ":a"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": ":a"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": ":dje"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": ":dje"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": ":a"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": ":a"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": ":a"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": ":e"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": ":dje"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": ":a"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Söndag"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Måndag"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Tisdag"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Onsdag"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Torsdag"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Fredag"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Lördag"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "Januari"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "Februari"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "Mars"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "April"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "Maj"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "Juni"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "Juli"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "Augusti"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "September"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "Oktober"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "November"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "December"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "am"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "pm"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Sön"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Mån"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Tis"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Ons"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Tor"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Fre"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Lör"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "Jan"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "Feb"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "Mar"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "Apr"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "Maj"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "Jun"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "Jul"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "Aug"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "Sep"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "Okt"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "Nov"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "Dec"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "<<period>> dagar från och med nu"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "<<period>> timmar från och med nu"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "<<period>> minuter från och med nu"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "<<period>> månader från och med nu"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "1 sekund från och med nu"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "<<period>> sekunder från och med nu"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "<<period>> år från och med nu"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> dagar sen"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> timmar sen"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> minuter sen"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> månader sen"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 sekund sen"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> seconds ago"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> år sen"
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animationer som kan användas med RevealWidget."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Kommandon som kan exekveras under Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Data som sätts in i `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Individuella filter-växel metoder."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Global data som sätts in i `$tw`."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operander för ''is'' filter-växeln."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "JavaScript makrodefinitioner."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Parser för olika innehållstyper."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Savers hanterar olika metoder för att spara filer från webbläsaren."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Uppstartsfunktioner."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Artikel-vyer anpassar animation och beteende över list-widgets."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Converts different content types into tiddlers."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Definierar beteendet för ett enstaka tiddler-fält."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Lägger till metoder till `$tw.Tiddler` prototypen."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Tillämpar uppgraderingsprocessens av tiddlers under en upgrade/import."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Lägger till metoder till `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Lägger till Node.js-specifik metod till `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Widgets kapslar in DOM rendering och uppdaterar."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Lägger till metoder till `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Individuell parserregler för huvud WikiText-parsern."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Varningsbakgrund"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Varningsram"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Varningsmarkering"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Dämpad varningsförgrund"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "Generell bakgrund"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Blockcitatslinje"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Standardbakgrund för knapp"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Standardram för knapp"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Standardförgrund för knapp"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Indikator för osparade ändringar"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Kodbakgrund"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Kodram"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Kodförgrund"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Bakgrund för Nedladdningsknapp"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Förgrund för Nedladdningsknapp"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Dragger background"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Dragger foreground"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Rullgardinsbakgrund"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Rullgardinsram"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Rullgardinsfliks bakgrund för valda flikar"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Rullgardinfliks bakgrund"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Dropzone background"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "Bakgrund för extern länk, hover"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "Bakgrund för besökt extern länk"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "Bakgrund för extern länk"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "Förgrund för extern länk, hover"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "Förgrund för besökt extern länk"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "Förgrund för extern länk"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "Generell förgrund"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Bakgrund för meddelanderuta"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Meddelanderutas ram"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Förgrund för meddelanderuta"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Modal bakgrund"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Modal bakgrund"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Modal ram"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Modal sidfotbakgrund"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Modal sidfotram"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Modal sidhuvudram"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "Generell dämpad förgrund"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Notifikationsbakrund"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Notifikationram"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Sidbakgrund"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Förformaterad kodbakgrund"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Förformaterad kodram"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "Generell primär"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Sidofältets knapp förgrund"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Sidofältets kontroller förgrund, hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Sidofältets kontroller förgrund"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Sidofältets förgrund skugga"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Sidofältets förgrund"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Sidofältets dämpade förgrund, hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Sidofältets dämpade förgrund"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Sidofältets flikbakgrund för valda flikar"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Sidofältets flikbakgrund"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Sidofältets flikram för valda flikar"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Sidofältets flikram"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Sidofältets uppdelare"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Sidofältets flikförgrund för valda flikar"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Sidofältets flikförgrund"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Förgrund för tiddler-länk i sidofältet, hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Förgrund för tiddler-länk i sidofältet"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Förgrund för sidrubrik"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Förgrund för Statisk varning"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Flikbakgrund för valda flikar"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Flikbakgrund"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Flikram för valda flikar"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Flikram"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Flikuppdelare"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Flikförgrund för valda flikar"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Flikförgrund"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Tabellram"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Bakgrund för tabellfot"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Förgrund för rubrikrad"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Taggbakgrund"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Taggförgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Tiddler-bakgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Tiddler-ram"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Förgrund för Tiddler-kontroller, hover"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Förgund för Tiddler-kontroller för valda kontroller"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Förgrund för Tiddler-kontroller"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Bakgrund för Tiddler-redigerare"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Rambild för Tiddler-redigerare"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Ram för Tiddler-redigerare"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Bakgrund för jämna fält i Tiddler-redigerare"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Bakgrund för ojämna fält i Tiddler-redigerare"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Tiddler infopanel bakgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Tiddler infopanel ram"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Tiddler infopanel flikbakgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Tiddler länkbakgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Tiddler länkbakgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Tiddler underrubrik förgrund"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Tiddler rubrik förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Verktygsfält 'ny tiddler' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Verktygsfält 'inställningar' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Verktygsfält 'spara' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Verktygsfält 'info' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Verktygsfält 'redigera' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Verktygsfält 'stäng' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Verktygsfält 'ta bort' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Verktygsfält 'avbryt' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Verktygsfält 'klar' knappen förgrund"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Otaggad pillerbakgrund"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Väldigt dämpad förgrund"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "This is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Hint": {
            "title": "$:/language/EditTemplate/Body/Hint",
            "text": "Use [[wiki text|http://tiddlywiki.com/static/WikiText.html]] to add formatting, images, and dynamic features"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Button/Hide": {
            "title": "$:/language/EditTemplate/Body/Preview/Button/Hide",
            "text": "göm förhandsvisning"
        },
        "$:/language/EditTemplate/Body/Preview/Button/Show": {
            "title": "$:/language/EditTemplate/Body/Preview/Button/Show",
            "text": "visa förhandsvisning"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "ta bort fält"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Ta bort fält"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "lägg till"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "fältnamn"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Lägg till ett nytt fält:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "fältvärde"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "Systemfält"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "Användarfält"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "Detta är en skugg-tiddler. Alla ändringar kommer överskrida ursprungsversionen"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "Detta är en modifierad skugg-tiddler. Du kan återgå till ursprungsversionen genom att ta bort denna tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "lägg till"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "taggnamn"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "tagglista"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Visa tagglista"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "innehållstyplista"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Visa lista över innehållstyp"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "ta bort innehållstyp"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Ta bort innehållstyp"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "innehållstyp"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Type:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Static HTML"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "JSON file"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "CSV file"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "\".tid\" file"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "Den fullständiga URI till en extern bild-tiddler"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "Namnet på den mapp som tiddlern kom från"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "Texten som visas på fliken eller knappen"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "Det CSS-färgsvärdet kopplat till en tiddler"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "Namnet på en komponent som är ansvarig för en [[alert tiddler|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Används för mellanlagring av den översta tiddlern i en [[history list|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "Datumet denna tiddler skapades"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "Namnet på personen som skapade en tiddler"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "För insticksprogram, lista beroende insticksprogram"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "Den beskrivande texten för ett insticksprogram, eller en modal-dialog"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "För utkast-tiddlers, innehåller rubriken av tiddlern som det är ett utkast för"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "Sidfotens text för en guide"
        },
        "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
            "title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
            "text": "Ett temporärt lagringsfält som används i [[$:/core/templates/static.content]]"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "Tiddlerns rubrik innehållande ikonen som är associerad med en tiddler"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "Om satt till \"Ja\" innebär att tiddlern ska sparas som ett Javaskriptbibliotek"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "En ordnad lista över tiddler-rubriker som är associerade med en tiddler"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "Om satt, rubriken på en tiddler, vid vilken denna tiddler förs in i den ordnade listan över tiddler-rubriker, eller i början av listan, om detta fält är närvarande men tom."
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "Om satt, rubriken på en tiddler varefter detta tiddler förs in i den ordnade listan över tiddler-rubriker."
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "Datumet och klockslaget när en tiddler var senast ändrad"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "Den tiddlerrubrik som har samma namn som författare som senast ändrade tiddler"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "Det läsbara namnet som skall kopplas till med en insticksprograms-tiddler"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "Ett numeriskt väde som indikerar prioriteringen av en insticksprograms-tiddler"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "Typen av insticksprogram för en insticksprograms-tiddler"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "Revisionen av tiddlern som finns på servern"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Datum för en TiddlyWiki-version"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "Käll-URL kopplat till en tiddler"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "Underrubrik för en guide"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "En lista över taggar kopplade till en tiddler"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "Brödtexten i en tiddler"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "Unika namnet för en tiddler"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "En tiddlers innehållstyp"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Ett insticksprograms version"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "Alla tiddlers förutom system-tiddlers"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Nyligen ändrade tiddlers, även system-tiddlers"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Nyligen ändrade tiddlers"
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "Alla taggar förutom system-taggar"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Saknade tiddlers"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Utkast-tiddlers"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Orphan tiddlers"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "System-tiddlers"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Skugg-tiddlers"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Åsidosatt skugg-tiddlers"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System-taggar"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Icke wiki-text-tiddlers"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\r\nVälkommen till ~TiddlyWiki och ~TiddlyWiki-community\n\nFör att komma igång med denna tomma TiddlyWiki, måste du ändra följande. Kolla på http://tiddlywiki.com/#GettingStarted för detaljer\n\n!! Ställ in denna ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\r\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\r\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit-text tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\r\n</div>\n\nKolla [[control panel|$:/ControlPanel]] för mer inställningar.\r\n"
        },
        "$:/language/Help/build": {
            "title": "$:/language/Help/build",
            "description": "Kör konfigurerade kommandon automatiskt",
            "text": "Bygger specifika byggmål för aktuell wiki. Om inget byggmål är specificerat så kommer alla mål att byggas.\n\n```\r\n--build <target> [<target> ...]\r\n```\n\nBygger mål som är definerade i `tiddlywiki.info` filen i en wiki mapp.\n\n"
        },
        "$:/language/Help/clearpassword": {
            "title": "$:/language/Help/clearpassword",
            "description": "Ta bort ett lösenord för efterföljande krypteringsoperationer",
            "text": "Ta bort lösenordet för efterföljande krypteringsoperationer\n\n```\r\n--clearpassword\r\n```\r\n"
        },
        "$:/language/Help/default": {
            "title": "$:/language/Help/default",
            "text": "\\define commandTitle()\r\n$:/language/Help/$(command)$\r\n\\end\r\n```\r\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\r\n```\n\nAvailable commands:\n\n<ul>\r\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\r\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\r\n</$list>\r\n</ul>\n\nFör detaljerad hjälp om ett kommando:\n\n```\r\ntiddlywiki --help <command>\r\n```\r\n"
        },
        "$:/language/Help/editions": {
            "title": "$:/language/Help/editions",
            "description": "Listar möjliga utgåvor av TiddlyWiki",
            "text": "Listar namnen och beskrivningen över de möjliga utgåvorna. Du kan skapa en ny wiki av en speficik utgåva med `--init` kommandot.\n\n```\r\n--editions\r\n```\r\n"
        },
        "$:/language/Help/help": {
            "title": "$:/language/Help/help",
            "description": "Visar hjälptext för TiddlyWiki-kommandon",
            "text": "Visar hjälptext för ett kommando:\n\n```\r\n--help [<command>]\r\n```\n\nOm kommandots namn utelämnas, kommer en lista över möjliga kommandon visas."
        },
        "$:/language/Help/init": {
            "title": "$:/language/Help/init",
            "description": "Initialise a new wiki folder",
            "text": "Initierar en tom [[WikiFolder|WikiFolders]] med en kopia av angiven utgåva.\n\n```\r\n--init <edition> [<edition> ...]\r\n```\n\nTill exempel:\n\n```\r\ntiddlywiki ./MyWikiFolder --init empty\r\n```\n\nNotera:\n\n* Wiki-mappen skapas om det är nödvändigt\r\n* \"Utgåvan\" blir som standard ''tom''\r\n* Intieringskommandot kommer misslyckas om wikimappen inte är tom\r\n* Intieringskommandot tar bort alla `includeWikis` definitioner i utgåvans `tiddlywiki.info` fil\r\n* När flera utgåvor är specificerade, skulle versioner som initialiseras senare skriva över alla filer som hör ihop med tidigare utgåvor (d.v.s. den senaste `tiddlywiki.info` filen kommer att kopieras från den senaste utgåvan)\r\n* `--editions` retunerar en lista över tillgänglia utgåvor\r\n"
        },
        "$:/language/Help/load": {
            "title": "$:/language/Help/load",
            "description": "Ladda tiddlers från en fil",
            "text": "Ladda tiddlers från 2.x.x TiddlyWiki filer (`.html`), `.tiddler`, `.tid`, `.json` eller andra filer\n\n```\r\n--load <filepath>\r\n```\n\nFör att ladda tiddlers från en krypterad TiddlyWiki-fil så måste du först ange lösenordet med PasswordCommand. Till exempel:\n\n```\r\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\r\n```\n\nNotera att TiddlyWiki inte kommer ladda änldre version av ett redan laddat insticksprogram.\r\n"
        },
        "$:/language/Help/makelibrary": {
            "title": "$:/language/Help/makelibrary",
            "description": "Konstruerar biblioteks-insticksprogram som är nödvändigt för uppgraderingsprocessen",
            "text": "Konstruerar `$:/UpgradeLibrary` tiddlern för uppgraderingsprocessen.\n\nUppgraderingsbiblioteket är formaterat som en vanligt inststicksprogram-tiddler med insticksprogramtypen `library`. Den innehåller en kopia av varje insticksprogram, teman och språkpaket som är tillgängliga via TiddlyWiki5 repository.\n\nDetta kommando är tänk att användas för internt bruk; det är enbart relevant för användare som skapar anpassade uppgraderingsprocedurer.\n\n```\r\n--makelibrary <title>\r\n```\n\nTitel argumentet som standard till `$:/UpgradeLibrary`.\r\n"
        },
        "$:/language/Help/notfound": {
            "title": "$:/language/Help/notfound",
            "text": "Hjälpsidan finns inte"
        },
        "$:/language/Help/output": {
            "title": "$:/language/Help/output",
            "description": "Ställer in output-mappen för efterföljande kommandon",
            "text": "Ställer in output-mappen för efterföljande kommandon. Standard output-mappen är `output` undermappen av utgåvans mapp\n\n```\r\n--output <pathname>\r\n```\n\nOm den specificerade sökvägen är relativ, så sätt den relativt till aktuell mapp. Till exempel `--output .` sätter output-mappen till aktuell mapp.\n\n"
        },
        "$:/language/Help/password": {
            "title": "$:/language/Help/password",
            "description": "Sätter ett lösenord för efterföljande krypteringsoperationer",
            "text": "Sätter ett lösenord för efterföljande krypteringsoperationer\n\n```\r\n--password <password>\r\n```\n\n"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Renderar en enstaka tiddler som en specifik innehållstyp",
            "text": "Renderar en enstaka tiddler som en specifik innehållstyp, standard till `text/html` och sparar den till det angivna filnamnet:\n\n```\r\n--rendertiddler <title> <filename> [<type>]\r\n```\n\nSom standard, sätts filnamnets sökväg relativt till `output` undermappen i utgåvans mapp. `--output` kommandot kan användas för att ställa in output till en annan mapp..\n\nAlla saknade mappar i sökvägen kommer automatiskt skapas.\r\n"
        },
        "$:/language/Help/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Renderar tiddlers där ett filter matchar en specifik innehållstyp",
            "text": "Renderar en grupp av tiddlers där ett filter matchar till separata filer av en specifik innehållstyp (stanard till `text/html`) och filändelse (standard till `.html`).\n\n```\r\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\r\n```\n\nTill exempel:\n\n```\r\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\r\n```\n\nSom standard, sätts sökvägen relativt till `output` undermappen i utgåvans mapp. `--output` kommandot kan användas för att ställa in output till en annan mapp.\n\nAlla filer i målmappen kommer tas bort om inte \"noclean\" parametern är angiven. Målmappen skapas rekursivt om den saknas.\r\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Sparar en rå tiddler till en fil",
            "text": "Sparar en enskild tiddler i dess råtext- eller binärformat till det specificerade filnamnet. \n\n```\r\n--savetiddler <title> <filename>\r\n```\n\nSom standard, filnamnens sökvägen är satt realtivt till `output` undermappen av utgåvans mapp. `--output` kommandot kan användas för att ställa in output till en annan mapp.\n\nAlla saknade mappar i sökvägen kommer automatiskt skapas.\r\n"
        },
        "$:/language/Help/savetiddlers": {
            "title": "$:/language/Help/savetiddlers",
            "description": "Sparar en grupp av råa tiddlers till en mapp",
            "text": "Sparar en grupp av tiddlers i dess råtext- eller binärformat till en specificerad mapp. \n\n```\r\n--savetiddlers <filter> <pathname>\r\n```\n\nSom standard, sökvägen är satt realtivt till `output` undermappen av utgåvans mapp. `--output` kommandot kan användas för att ställa in output till en annan mapp.\n\nAlla saknade mappar i sökvägen kommer automatiskt skapas.\r\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Tillhandahåller ett HTTP serverinterface till TiddlyWiki",
            "text": "Server som är inbygdd i TiddlyWiki5 är väldigt simpel. Även om den är kompatibel med TiddlyWeb så stödjer den inte många av de funktioner som är nödvädniga för en pålitlig användning ut mot Internet.\n\nI roten, tillhandahåller den rendering av en specifik tiddler. Bort från roten, tillhandahåller den individuella tiddlers kodade i JSON, och stödjer basala HTTP funktioner som `GET`, `PUT` och `DELETE`.\n\n```\r\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>\r\n```\n\nParametrarna är:\n\n* ''port'' - portnummer för att tillhandahålla från (standard satt till \"8080\")\r\n* ''roottiddler'' - Tiddlern som tillhandahålls vid roten (standard satt till \"$:/core/save/all\") \r\n* ''rendertype'' - Den innehållstyp rot-tiddlern ska renderas som (standard satt till \"text/plain\")\r\n* ''servetype'' -  Den innehållstyp rot-tiddlern ska tillhandahållas som som (standard satt till \"text/html\")\r\n* ''username'' - Standad användarnamnet till signering av redigeringar\r\n* ''password'' - frivilligt, lösenord för basic autentisering\r\n* ''host'' - frivilligt, värdnamn att tillhandahålla från (standard satt till \"127.0.0.1\" o.k.s. \"localhost\")\r\n* ''pathprefix'' - frivilligt, prefix för sökvägar\n\nOm lösenordsparametern är angiven, kommer webbläsaren be användaren om användarnamn och lösenord. Notera att lösenordet skickas i klartext så denna implementering är inte lämplig för generell användning.\n\nTill exempel:\n\n```\r\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\r\n```\n\nAnvändarnamn och lösenord kan specificeras som tomma strängar om du har behov att sätta värdnamn eller sökvägsprefix och inte vill kräva ett lösenord:\n\n```\r\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\r\n```\n\nFör att köra flera TiddlyWiki-servrar samtidigt, måste du ställa in varje med unik port.\r\n"
        },
        "$:/language/Help/setfield": {
            "title": "$:/language/Help/setfield",
            "description": "Förbereder externa tiddlers för användning",
            "text": "//Notera att detta kommando är experimentiellt och kan ändras eller ersättas innan det är färdigställt//\n\nSätter det speficficerade fältet för en grupp av tiddlers med resultatet att wikifiera en mall-tiddler med `currentTiddler` variabeln satt till den tiddlern.\n\n```\r\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\r\n```\n\nParametrarna är:\n\n* ''filter'' - filtrera de identifierade tiddlers som kommer påverkas\r\n* ''fieldname'' - fältet som ska ändras (standard satt till \"text\")\r\n* ''templatetitle'' - tiddlern som ska wikifieras till ett specifikt fält. Om det är blankt eller saknas så kommer det specificerade fältet tas bort\r\n* ''rendertype'' - texttypen att rendera (standard satt till \"text/plain\"; \"text/html\" kan användas för att få med HTML-taggar)\r\n"
        },
        "$:/language/Help/unpackplugin": {
            "title": "$:/language/Help/unpackplugin",
            "description": "Packar upp payload-tiddlers från ett insticksprogram",
            "text": "Packar upp payload-tiddlers från ett insticksprogram, skapar dem som vanliga tiddlers:\n\n```\r\n--unpackplugin <title>\r\n```\r\n"
        },
        "$:/language/Help/verbose": {
            "title": "$:/language/Help/verbose",
            "description": "Slår på detaljerad utskriftsläge",
            "text": "Slår på detaljerad utskriftsläge, användbart för felsökning \n\n```\r\n--verbose\r\n```\r\n"
        },
        "$:/language/Help/version": {
            "title": "$:/language/Help/version",
            "description": "Visar versionsnumret för en TiddlyWiki",
            "text": "Visar versionsnumret för en TiddlyWiki.\n\n```\r\n--version\r\n```\r\n"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Avbryt"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "Dessa tiddlers är redo att importeras:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Importera"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Välj"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Status"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Rubrik"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Blockerat, inkompatibelt eller föråldrat insticksprogram "
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Blockerat insticksprogram (pga <<incoming>>  är äldre änd nuvarande <<existing>>)"
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Uppgraderat insticksprogram från <<incoming>> till <<upgraded>>"
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Blockerad temporär state-tiddler"
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Blockerad system-tiddler"
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrera justeringar för temat från <$text text=<<from>>/>"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "Denna tiddler innehåller binär data"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "Denna tiddler är skriven i TiddlyWiki klassisk wiki-textformat, vilket inte är fullständigt kompatibelt med TiddlyWiki version 5. Läs http://tiddlywiki.com/static/Upgrading.html för mer info. "
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "uppgradera"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "stäng alla"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Vill du ångra ändringar för denna tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Vill du ta bort denna tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Vill du skriva över denna tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "Ny Tiddler"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Drop here (or use the 'Escape' key to cancel)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Avbryt"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Vill du rensa lösenordet? Detta kommer ta bort krypteringen när du sparar denna wiki"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Ställ in nytt lösenord för denna TiddlyWiki"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Användarnamn"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Lösenord"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Upprepa lösenordet"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Lösenorden matchar inte"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Ställ in lösenord"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Ogiltigt tecken i namn-fältet \"<$text text=<<fieldName>>/>\". Fält kan bara innehålla gemena bokstäver, siffror och tecknen understreck (`_`), bindestreck (`-`) and punkt (`.`)"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Saknar tiddler \"<$text text=<<currentTiddler>>/>\" - klicka {{$:/core/images/edit-button}} för att skapa"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Officiella ~TiddlyWiki Insticksprogramsbibliotek"
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Spara {{$:/core/ui/Buttons/save-wiki}} och ladda om {{$:/core/ui/Buttons/refresh}} för att ändringarna för insticksprogrammen ska slå igenom"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DD MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "Detta är en system-tiddler"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Färg"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Antal"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Ikon"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tagg"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "Du har osparade ändringar i TiddlyWiki"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Din webbläsare stödjer bara manuell sparning.\n\nFör att spara din ändrade wiki, högerklicka på nedladdninslänken nedan och välj \"Spara länk som...\", och sen välj mapp och filnamn.\n\n//Du kan snabba upp lite genom att klicka på länken med alt-knappen nedtryckt. Du får då inte fråga om var du ska spara eller vad filen ska heta, troligvis så kommer din webbläsare ge filen ett oigenkänligt namn-- du kan behöva döpa om filen och se till att den har en filändelsen `.html` innan du kan använda den.//\n\nPå smartphone som inte tillåter att du sparar ner filer så kan du istället bokmärka länken, och sen synka dina bokmärken till din dator som du därifrån kan spara ner normalt."
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://tiddlywiki.com/static/SavingChanges.html",
            "text": "Dina ändringar för denna wiki behöver sparas som en ~TiddlyWiki HTML-fil.\n\n!!! Webbläsare för datorer\n\n# Välj ''Spara som'' från ''Arkivmenyn''\r\n# Välj filnamn och plats\r\n#* Vissa webbläsare kräver att man anger filens format som tex ''Websida, endast HTML'' eller liknande\r\n# Stäng denna fliken\n\n!!! Webbläsare för smartphones\n\n# Skapa ett bokmärke till denna sidan\r\n#* Om du har iCloud eller Google Sync inställt så kommer bokmärket automatiskt synkas till ditt skrivbord där du kan öppna och spara den enligt ovan\r\n# Stäng denna fliken\n\n//Om du öppnar bokmärket igen i Mobile Safari så kommer du se detta meddelande igen. Om du vill fortsätta och använda filen, klicka bara på ''stängknappen'' nedanför//\r\n"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DD MMM YYYY"
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Journal"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Sparade wiki"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Börjar spara wiki"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "Lista"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Filter"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Sök via [[filter expression|http://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> träffar</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> träffar</small>//"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Skuggor"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Sök efter skugg-tiddlers"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> träffar</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Standard"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Sök efter standard-tiddlers"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> träffar</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "System"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Sök efter system-tiddlers"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> träffar</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "Alla"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Innehåll"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Utkast"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Saknas"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "Mer"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Öppna"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Orphans"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Senast"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "System"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Taggar"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "otaggat"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Verktyg"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Typer"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "en återanvändbar icke-linjär personlig webbanteckningsbok"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "Min ~TiddlyWiki"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Avancerat"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "none"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Detaljer för insticksprogram"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "Detta insticksprogram innehåller följande skugg-tiddler:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Skugg-status"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "Tiddlern <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> är inte en skugg-tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "Tiddlern <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> är en skugg-tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "Det är definerat i insticksprogrammet <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "Det är överskridet av en allmän tiddler"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Fält"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "Lista"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "Denna tiddler har ingen lista"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "Listade"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "Denna tiddler är inte listad av någon annan tiddler"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "Referenser"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "Inga tiddlers länkar till denna"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Taggning"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "Inga tiddlers är taggade med denna"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Verktyg"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript-kod",
            "name": "application/javascript",
            "group": "Utvecklare"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON-data",
            "name": "application/json",
            "group": "Utvecklare"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Databibliotek",
            "name": "application/x-tiddler-dictionary",
            "group": "Utvecklare"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF-bild",
            "name": "image/gif",
            "group": "Bild"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG-bild",
            "name": "image/jpeg",
            "group": "Bild"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG-bild",
            "name": "image/png",
            "group": "bild"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Bild"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO ikonfil",
            "name": "image/x-icon",
            "group": "Bild"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Utvecklare"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML-kod",
            "name": "text/html",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Ren text",
            "name": "text/plain",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki klassisk",
            "name": "text/x-tiddlywiki",
            "group": "Text"
        },
        "$:/languages/sv-SE/icon": {
            "title": "$:/languages/sv-SE/icon",
            "type": "image/svg+xml",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"600\" viewBox=\"0 0 16 10\">\r\n<rect width=\"16\" height=\"10\" fill=\"#006aa7\"/>\r\n<rect width=\"2\" height=\"10\" x=\"5\" fill=\"#fecc00\"/>\r\n<rect width=\"16\" height=\"2\" y=\"4\" fill=\"#fecc00\"/>\r\n</svg>"
        }
    }
}
{
    "tiddlers": {
        "$:/config/EditorTypeMappings/application/javascript": {
            "title": "$:/config/EditorTypeMappings/application/javascript",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/application/json": {
            "title": "$:/config/EditorTypeMappings/application/json",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/application/x-tiddler-dictionary": {
            "title": "$:/config/EditorTypeMappings/application/x-tiddler-dictionary",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/text/css": {
            "title": "$:/config/EditorTypeMappings/text/css",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/text/html": {
            "title": "$:/config/EditorTypeMappings/text/html",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/text/plain": {
            "title": "$:/config/EditorTypeMappings/text/plain",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
            "text": "codemirror"
        },
        "$:/config/EditorTypeMappings/text/x-tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/x-tiddlywiki",
            "text": "codemirror"
        },
        "$:/core/modules/widgets/edit-codemirror.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-codemirror.js\ntype: application/javascript\nmodule-type: widget\n\nCodemirror-based text editor widget\n\nConfig options \"$:/config/CodeMirror\" e.g. to allow vim key bindings\n {\n\t\"require\": [\n\t\t\"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js\",\n\t\t\"$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js\",\n\t\t\"$:/plugins/tiddlywiki/codemirror/keymap/vim.js\"\n\t],\n\t\"configuration\": {\n\t\t\t\"keyMap\": \"vim\",\n\t\t\t\"showCursorWhenSelecting\": true\n\t}\n}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CODEMIRROR_OPTIONS = \"$:/config/CodeMirror\";\n\n// Install CodeMirror\nif($tw.browser && !window.CodeMirror) {\n\twindow.CodeMirror = require(\"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\");\n\t// Install required CodeMirror plugins\n\tvar configOptions = $tw.wiki.getTiddlerData(CODEMIRROR_OPTIONS,{}),\n\t\treq = configOptions.require;\n\tif(req) {\n\t\tif($tw.utils.isArray(req)) {\n\t\t\tfor(var index=0; index<req.length; index++) {\n\t\t\t\trequire(req[index]);\n\t\t\t}\n\t\t} else {\n\t\t\trequire(req);\n\t\t}\n\t}\n}\n\nvar MIN_TEXT_AREA_HEIGHT = 100; // Minimum height of textareas in pixels\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditCodeMirrorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditCodeMirrorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditCodeMirrorWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the configuration options for the CodeMirror object\n\tvar config = $tw.wiki.getTiddlerData(CODEMIRROR_OPTIONS,{}).configuration || {},\n\t\teditInfo = this.getEditInfo();\n\tif(!(\"lineWrapping\" in config)) {\n\t\tconfig.lineWrapping = true;\n\t}\n\tif(!(\"lineNumbers\" in config)) {\n\t\tconfig.lineNumbers = true;\n\t}\n\tconfig.mode = editInfo.type;\n\tconfig.value = editInfo.value;\n\t// Create the CodeMirror instance\n\tvar cm = window.CodeMirror(function(domNode) {\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tself.domNodes.push(domNode);\n\t},config);\n\t// Set up a change event handler\n\tcm.on(\"change\",function() {\n\t\tself.saveChanges(cm.getValue());\n\t});\n\tthis.codeMirrorInstance = cm;\n};\n\n/*\nGet the tiddler being edited and current value\n*/\nEditCodeMirrorWidget.prototype.getEditInfo = function() {\n\t// Get the edit value\n\tvar self = this,\n\t\tvalue,\n\t\ttype = \"text/plain\",\n\t\tupdate;\n\tif(this.editIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\tupdate = function(value) {\n\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// Get the current tiddler and the field name\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\tif(this.editField === \"text\") {\n\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t}\n\t\t} else {\n\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\tswitch(this.editField) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\tvalue = this.editDefault;\n\t\t\t}\n\t\t}\n\t\tupdate = function(value) {\n\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\tupdateFields = {\n\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t};\n\t\t\tupdateFields[self.editField] = value;\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t};\n\t}\n\tif(this.editType) {\n\t\ttype = this.editType;\n\t}\n\treturn {value: value || \"\", type: type, update: update};\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditCodeMirrorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editDefault = this.getAttribute(\"default\");\n\tthis.editType = this.getAttribute(\"type\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditCodeMirrorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Completely rerender if any of our attributes have changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.editTitle]) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n/*\nUpdate the editor with new text and type. This method is separate from updateEditorDomNode()\nso that subclasses can override updateEditor() and still use updateEditorDomNode()\n*/\nEditCodeMirrorWidget.prototype.updateEditor = function(text,type) {\n\tthis.updateEditorDomNode(text);\n\tthis.codeMirrorInstance.setOption(\"mode\",type);\n};\n\n/*\nUpdate the editor dom node with new text\n*/\nEditCodeMirrorWidget.prototype.updateEditorDomNode = function(text) {\n\tif(this.codeMirrorInstance) {\n\t\tif(!this.codeMirrorInstance.hasFocus()) {\n\t\t\tthis.codeMirrorInstance.setValue(text);\n\t\t}\n\t}\n};\n\nEditCodeMirrorWidget.prototype.saveChanges = function(text) {\n\tvar editInfo = this.getEditInfo();\n\tif(text !== editInfo.value) {\n\t\teditInfo.update(text);\n\t}\n};\n\nexports[\"edit-codemirror\"] = EditCodeMirrorWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-codemirror.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/plugins/tiddlywiki/codemirror/lib/codemirror.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/lib/codemirror.js",
            "module-type": "library",
            "text": "// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    module.exports = mod();\n  else if (typeof define == \"function\" && define.amd) // AMD\n    return define([], mod);\n  else // Plain browser env\n    this.CodeMirror = mod();\n})(function() {\n  \"use strict\";\n\n  // BROWSER SNIFFING\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n\n  var gecko = /gecko\\/\\d/i.test(navigator.userAgent);\n  // ie_uptoN means Internet Explorer version N or lower\n  var ie_upto10 = /MSIE \\d/.test(navigator.userAgent);\n  var ie_upto7 = ie_upto10 && (document.documentMode == null || document.documentMode < 8);\n  var ie_upto8 = ie_upto10 && (document.documentMode == null || document.documentMode < 9);\n  var ie_upto9 = ie_upto10 && (document.documentMode == null || document.documentMode < 10);\n  var ie_11up = /Trident\\/([7-9]|\\d{2,})\\./.test(navigator.userAgent);\n  var ie = ie_upto10 || ie_11up;\n  var webkit = /WebKit\\//.test(navigator.userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(navigator.userAgent);\n  var chrome = /Chrome\\//.test(navigator.userAgent);\n  var presto = /Opera\\//.test(navigator.userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var khtml = /KHTML\\//.test(navigator.userAgent);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(navigator.userAgent);\n  var phantom = /PhantomJS/.test(navigator.userAgent);\n\n  var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);\n  var mac = ios || /Mac/.test(navigator.platform);\n  var windows = /win/i.test(navigator.platform);\n\n  var presto_version = presto && navigator.userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) presto_version = Number(presto_version[1]);\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && !ie_upto8);\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  // EDITOR CONSTRUCTOR\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);\n\n    this.options = options = options || {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n    setGuttersForLineNumbers(options);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") doc = new Doc(doc, options.mode);\n    this.doc = doc;\n\n    var display = this.display = new Display(place, doc);\n    display.wrapper.CodeMirror = this;\n    updateGutters(this);\n    themeChanged(this);\n    if (options.lineWrapping)\n      this.display.wrapper.className += \" CodeMirror-wrap\";\n    if (options.autofocus && !mobile) focusInput(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false, focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput\n      draggingText: false,\n      highlight: new Delayed() // stores highlight worker timeout\n    };\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie_upto10) setTimeout(bind(resetInput, this, true), 20);\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    var cm = this;\n    runInOp(this, function() {\n      cm.curOp.forceUpdate = true;\n      attachDoc(cm, doc);\n\n      if ((options.autofocus && !mobile) || activeElt() == display.input)\n        setTimeout(bind(onFocus, cm), 20);\n      else\n        onBlur(cm);\n\n      for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))\n        optionHandlers[opt](cm, options[opt], Init);\n      for (var i = 0; i < initHooks.length; ++i) initHooks[i](cm);\n    });\n  }\n\n  // DISPLAY CONSTRUCTOR\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc) {\n    var d = this;\n\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    var input = d.input = elt(\"textarea\", null, null, \"position: absolute; padding: 0; width: 1px; height: 1em; outline: none\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) input.style.width = \"1000px\";\n    else input.setAttribute(\"wrap\", \"off\");\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) input.style.border = \"1px solid black\";\n    input.setAttribute(\"autocorrect\", \"off\"); input.setAttribute(\"autocapitalize\", \"off\"); input.setAttribute(\"spellcheck\", \"false\");\n\n    // Wraps and hides input textarea\n    d.inputDiv = elt(\"div\", [input], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The fake scrollbar elements.\n    d.scrollbarH = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    d.scrollbarV = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = elt(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = elt(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [elt(\"div\", [d.lineSpace], \"CodeMirror-lines\")], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerCutOff + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.inputDiv, d.scrollbarH, d.scrollbarV,\n                            d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie_upto7) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    // Needed to hide big blue blinking cursor on Mobile Safari\n    if (ios) input.style.width = \"0px\";\n    if (!webkit) d.scroller.draggable = true;\n    // Needed to handle Tab key in KHTML\n    if (khtml) { d.inputDiv.style.height = \"1px\"; d.inputDiv.style.position = \"absolute\"; }\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie_upto7) d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = \"18px\";\n\n    if (place.appendChild) place.appendChild(d.wrapper);\n    else place(d.wrapper);\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastSizeC = 0;\n    d.updateLineNumbers = null;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // See readInput and resetInput\n    d.prevInput = \"\";\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    d.pollingFast = false;\n    // Self-resetting timeout for the poller\n    d.poll = new Delayed();\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks when resetInput has punted to just putting a short\n    // string into the textarea instead of the full selection.\n    d.inaccurateSelection = false;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n  }\n\n  // STATE UPDATES\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function(line) {\n      if (line.stateAfter) line.stateAfter = null;\n      if (line.styles) line.styles = null;\n    });\n    cm.doc.frontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) regChange(cm);\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function(){updateScrollbars(cm);}, 100);\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function(line) {\n      if (lineIsHidden(cm.doc, line)) return 0;\n\n      var widgetsHeight = 0;\n      if (line.widgets) for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) widgetsHeight += line.widgets[i].height;\n      }\n\n      if (wrapping)\n        return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n      else\n        return widgetsHeight + th;\n    };\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function(line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) updateLineHeight(line, estHeight);\n    });\n  }\n\n  function keyMapChanged(cm) {\n    var map = keyMap[cm.options.keyMap], style = map.style;\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-keymap-\\S+/g, \"\") +\n      (style ? \" cm-keymap-\" + style : \"\");\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  function guttersChanged(cm) {\n    updateGutters(cm);\n    regChange(cm);\n    setTimeout(function(){alignHorizontally(cm);}, 20);\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function updateGutters(cm) {\n    var gutters = cm.display.gutters, specs = cm.options.gutters;\n    removeChildren(gutters);\n    for (var i = 0; i < specs.length; ++i) {\n      var gutterClass = specs[i];\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n      if (gutterClass == \"CodeMirror-linenumbers\") {\n        cm.display.lineGutter = gElt;\n        gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = i ? \"\" : \"none\";\n    updateGutterSpace(cm);\n  }\n\n  function updateGutterSpace(cm) {\n    var width = cm.display.gutters.offsetWidth;\n    cm.display.sizer.style.marginLeft = width + \"px\";\n    cm.display.scrollbarH.style.left = cm.options.fixedGutter ? width + \"px\" : 0;\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) return 0;\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found = merged.find(0, true);\n      len -= cur.text.length - found.from.ch;\n      cur = found.to.line;\n      len += cur.text.length - found.to.ch;\n    }\n    return len;\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function(line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // Make sure the gutters options contains the element\n  // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n  function setGuttersForLineNumbers(options) {\n    var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n    if (found == -1 && options.lineNumbers) {\n      options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n    } else if (found > -1 && !options.lineNumbers) {\n      options.gutters = options.gutters.slice(0);\n      options.gutters.splice(found, 1);\n    }\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var scroll = cm.display.scroller;\n    return {\n      clientHeight: scroll.clientHeight,\n      barHeight: cm.display.scrollbarV.clientHeight,\n      scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth,\n      barWidth: cm.display.scrollbarH.clientWidth,\n      docHeight: Math.round(cm.doc.height + paddingVert(cm.display))\n    };\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbars(cm, measure) {\n    if (!measure) measure = measureForScrollbars(cm);\n    var d = cm.display;\n    var scrollHeight = measure.docHeight + scrollerCutOff;\n    var needsH = measure.scrollWidth > measure.clientWidth;\n    var needsV = scrollHeight > measure.clientHeight;\n    if (needsV) {\n      d.scrollbarV.style.display = \"block\";\n      d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + \"px\" : \"0\";\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      d.scrollbarV.firstChild.style.height =\n        Math.max(0, scrollHeight - measure.clientHeight + (measure.barHeight || d.scrollbarV.clientHeight)) + \"px\";\n    } else {\n      d.scrollbarV.style.display = \"\";\n      d.scrollbarV.firstChild.style.height = \"0\";\n    }\n    if (needsH) {\n      d.scrollbarH.style.display = \"block\";\n      d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + \"px\" : \"0\";\n      d.scrollbarH.firstChild.style.width =\n        (measure.scrollWidth - measure.clientWidth + (measure.barWidth || d.scrollbarH.clientWidth)) + \"px\";\n    } else {\n      d.scrollbarH.style.display = \"\";\n      d.scrollbarH.firstChild.style.width = \"0\";\n    }\n    if (needsH && needsV) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + \"px\";\n    } else d.scrollbarFiller.style.display = \"\";\n    if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = scrollbarWidth(d.measure) + \"px\";\n      d.gutterFiller.style.width = d.gutters.offsetWidth + \"px\";\n    } else d.gutterFiller.style.display = \"\";\n\n    if (!cm.state.checkedOverlayScrollbar && measure.clientHeight > 0) {\n      if (scrollbarWidth(d.measure) === 0) {\n        var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n        d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = w;\n        var barMouseDown = function(e) {\n          if (e_target(e) != d.scrollbarV && e_target(e) != d.scrollbarH)\n            operation(cm, onMouseDown)(e);\n        };\n        on(d.scrollbarV, \"mousedown\", barMouseDown);\n        on(d.scrollbarH, \"mousedown\", barMouseDown);\n      }\n      cm.state.checkedOverlayScrollbar = true;\n    }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewPort may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewPort) {\n    var top = viewPort && viewPort.top != null ? viewPort.top : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewPort && viewPort.bottom != null ? viewPort.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewPort && viewPort.ensure) {\n      var ensureFrom = viewPort.ensure.from.line, ensureTo = viewPort.ensure.to.line;\n      if (ensureFrom < from)\n        return {from: ensureFrom,\n                to: lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)};\n      if (Math.min(ensureTo, doc.lastLine()) >= to)\n        return {from: lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight),\n                to: ensureTo};\n    }\n    return {from: from, to: to};\n  }\n\n  // LINE NUMBERS\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) if (!view[i].hidden) {\n      if (cm.options.fixedGutter && view[i].gutter)\n        view[i].gutter.style.left = left;\n      var align = view[i].alignable;\n      if (align) for (var j = 0; j < align.length; j++)\n        align[j].style.left = left;\n    }\n    if (cm.options.fixedGutter)\n      display.gutters.style.left = (comp + gutterW) + \"px\";\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) return false;\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm);\n      return true;\n    }\n    return false;\n  }\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber));\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n  }\n\n  // DISPLAY DRAWING\n\n  // Updates the display, selection, and scrollbars, using the\n  // information in display.view to find out which nodes are no longer\n  // up-to-date. Tries to bail out early when no changes are needed,\n  // unless forced is true.\n  // Returns true if an actual update happened, false otherwise.\n  function updateDisplay(cm, viewPort, forced) {\n    var oldFrom = cm.display.viewFrom, oldTo = cm.display.viewTo, updated;\n    var visible = visibleLines(cm.display, cm.doc, viewPort);\n    for (var first = true;; first = false) {\n      var oldWidth = cm.display.scroller.clientWidth;\n      if (!updateDisplayInner(cm, visible, forced)) break;\n      updated = true;\n\n      // If the max line changed since it was last measured, measure it,\n      // and ensure the document's width matches it.\n      if (cm.display.maxLineChanged && !cm.options.lineWrapping)\n        adjustContentWidth(cm);\n\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      setDocumentHeight(cm, barMeasure);\n      updateScrollbars(cm, barMeasure);\n      if (webkit && cm.options.lineWrapping)\n        checkForWebkitWidthBug(cm, barMeasure); // (Issue #2420)\n      if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {\n        forced = true;\n        continue;\n      }\n      forced = false;\n\n      // Clip forced viewport to actual scrollable area.\n      if (viewPort && viewPort.top != null)\n        viewPort = {top: Math.min(barMeasure.docHeight - scrollerCutOff - barMeasure.clientHeight, viewPort.top)};\n      // Updated line heights might result in the drawn area not\n      // actually covering the viewport. Keep looping until it does.\n      visible = visibleLines(cm.display, cm.doc, viewPort);\n      if (visible.from >= cm.display.viewFrom && visible.to <= cm.display.viewTo)\n        break;\n    }\n\n    cm.display.updateLineNumbers = null;\n    if (updated) {\n      signalLater(cm, \"update\", cm);\n      if (cm.display.viewFrom != oldFrom || cm.display.viewTo != oldTo)\n        signalLater(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n    }\n    return updated;\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayInner(cm, visible, forced) {\n    var display = cm.display, doc = cm.doc;\n    if (!display.wrapper.offsetWidth) {\n      resetView(cm);\n      return;\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!forced && visible.from >= display.viewFrom && visible.to <= display.viewTo &&\n        countDirtyView(cm) == 0)\n      return;\n\n    if (maybeUpdateLineNumberWidth(cm))\n      resetView(cm);\n    var dims = getDimensions(cm);\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom);\n    if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo);\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastSizeC != display.wrapper.clientHeight;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !forced) return;\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var focused = activeElt();\n    if (toUpdate > 4) display.lineDiv.style.display = \"none\";\n    patchDisplay(cm, display.updateLineNumbers, dims);\n    if (toUpdate > 4) display.lineDiv.style.display = \"\";\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    if (focused && activeElt() != focused && focused.offsetHeight) focused.focus();\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n\n    if (different) {\n      display.lastSizeC = display.wrapper.clientHeight;\n      startWorker(cm, 400);\n    }\n\n    updateHeightsInViewport(cm);\n\n    return true;\n  }\n\n  function adjustContentWidth(cm) {\n    var display = cm.display;\n    var width = measureChar(cm, display.maxLine, display.maxLine.text.length).left;\n    display.maxLineChanged = false;\n    var minWidth = Math.max(0, width + 3);\n    var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + minWidth + scrollerCutOff - display.scroller.clientWidth);\n    display.sizer.style.minWidth = minWidth + \"px\";\n    if (maxScrollLeft < cm.doc.scrollLeft)\n      setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = Math.max(measure.docHeight, measure.clientHeight - scrollerCutOff) + \"px\";\n  }\n\n\n  function checkForWebkitWidthBug(cm, measure) {\n    // Work around Webkit bug where it sometimes reserves space for a\n    // non-existing phantom scrollbar in the scroller (Issue #2420)\n    if (cm.display.sizer.offsetWidth + cm.display.gutters.offsetWidth < cm.display.scroller.clientWidth - 1) {\n      cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = \"0px\";\n      cm.display.gutters.style.height = measure.docHeight + \"px\";\n    }\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], height;\n      if (cur.hidden) continue;\n      if (ie_upto7) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n      }\n      var diff = cur.line.height - height;\n      if (height < 2) height = textHeight(display);\n      if (diff > .001 || diff < -.001) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) for (var j = 0; j < cur.rest.length; j++)\n          updateWidgetHeight(cur.rest[j]);\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) for (var i = 0; i < line.widgets.length; ++i)\n      line.widgets[i].height = line.widgets[i].node.offsetHeight;\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      left[cm.options.gutters[i]] = n.offsetLeft;\n      width[cm.options.gutters[i]] = n.offsetWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth};\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        node.style.display = \"none\";\n      else\n        node.parentNode.removeChild(node);\n      return next;\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) {\n      } else if (!lineView.node) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) cur = rm(cur);\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) updateNumber = false;\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) cur = rm(cur);\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") updateLineText(cm, lineView);\n      else if (type == \"gutter\") updateLineGutter(cm, lineView, lineN, dims);\n      else if (type == \"class\") updateLineClasses(lineView);\n      else if (type == \"widget\") updateLineWidgets(lineView, dims);\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n      lineView.node.appendChild(lineView.text);\n      if (ie_upto7) lineView.node.style.zIndex = 2;\n    }\n    return lineView.node;\n  }\n\n  function updateLineBackground(lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) cls += \" CodeMirror-linebackground\";\n    if (lineView.background) {\n      if (cls) lineView.background.className = cls;\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built;\n    }\n    return buildLineContent(cm, lineView);\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) lineView.node = built.pre;\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(lineView) {\n    updateLineBackground(lineView);\n    if (lineView.line.wrapClass)\n      ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n    else if (lineView.node != lineView.text)\n      lineView.node.className = \"\";\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter =\n        wrap.insertBefore(elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"position: absolute; left: \" +\n                              (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"),\n                          lineView.text);\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \"\n              + cm.display.lineNumInnerWidth + \"px\"));\n      if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) {\n        var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" +\n                                     dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n      }\n    }\n  }\n\n  function updateLineWidgets(lineView, dims) {\n    if (lineView.alignable) lineView.alignable = null;\n    for (var node = lineView.node.firstChild, next; node; node = next) {\n      var next = node.nextSibling;\n      if (node.className == \"CodeMirror-linewidget\")\n        lineView.node.removeChild(node);\n    }\n    insertLineWidgets(lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) lineView.bgClass = built.bgClass;\n    if (built.textClass) lineView.textClass = built.textClass;\n\n    updateLineClasses(lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(lineView, dims);\n    return lineView.node;\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(lineView, dims) {\n    insertLineWidgetsFor(lineView.line, lineView, dims, true);\n    if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n      insertLineWidgetsFor(lineView.rest[i], lineView, dims, false);\n  }\n\n  function insertLineWidgetsFor(line, lineView, dims, allowAbove) {\n    if (!line.widgets) return;\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n      if (!widget.handleMouseEvents) node.ignoreEvents = true;\n      positionLineWidget(widget, node, lineView, dims);\n      if (allowAbove && widget.above)\n        wrap.insertBefore(node, lineView.gutter || lineView.text);\n      else\n        wrap.appendChild(node);\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n      (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n    }\n  }\n\n  // POSITION OBJECT\n\n  // A Pos instance represents a position within the text.\n  var Pos = CodeMirror.Pos = function(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  };\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; };\n\n  function copyPos(x) {return Pos(x.line, x.ch);}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }\n\n  // SELECTION / CURSOR\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  function Selection(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  }\n\n  Selection.prototype = {\n    primary: function() { return this.ranges[this.primIndex]; },\n    equals: function(other) {\n      if (other == this) return true;\n      if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false;\n      for (var i = 0; i < this.ranges.length; i++) {\n        var here = this.ranges[i], there = other.ranges[i];\n        if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false;\n      }\n      return true;\n    },\n    deepCopy: function() {\n      for (var out = [], i = 0; i < this.ranges.length; i++)\n        out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n      return new Selection(out, this.primIndex);\n    },\n    somethingSelected: function() {\n      for (var i = 0; i < this.ranges.length; i++)\n        if (!this.ranges[i].empty()) return true;\n      return false;\n    },\n    contains: function(pos, end) {\n      if (!end) end = pos;\n      for (var i = 0; i < this.ranges.length; i++) {\n        var range = this.ranges[i];\n        if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n          return i;\n      }\n      return -1;\n    }\n  };\n\n  function Range(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  }\n\n  Range.prototype = {\n    from: function() { return minPos(this.anchor, this.head); },\n    to: function() { return maxPos(this.anchor, this.head); },\n    empty: function() {\n      return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n    }\n  };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(ranges, primIndex) {\n    var prim = ranges[primIndex];\n    ranges.sort(function(a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      if (cmp(prev.to(), cur.from()) >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) --primIndex;\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex);\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0);\n  }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) return Pos(doc.first, 0);\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) return Pos(last, getLine(doc, last).text.length);\n    return clipToLen(pos, getLine(doc, pos.line).text.length);\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) return Pos(pos.line, linelen);\n    else if (ch < 0) return Pos(pos.line, 0);\n    else return pos;\n  }\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}\n  function clipPosArray(doc, array) {\n    for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]);\n    return out;\n  }\n\n  // SELECTION UPDATES\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(doc, range, head, other) {\n    if (doc.cm && doc.cm.display.shift || doc.extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head);\n    } else {\n      return new Range(other || head, head);\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options) {\n    setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    for (var out = [], i = 0; i < doc.sel.ranges.length; i++)\n      out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);\n    var newSel = normalizeSelection(out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head));\n      }\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n    if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1);\n    else return sel;\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      sel = filterSelectionChange(doc, sel);\n\n    var bias = cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1;\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      ensureCursorVisible(doc.cm);\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) return;\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) out = sel.ranges.slice(0, i);\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(out, sel.primIndex) : sel;\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, bias, mayClear) {\n    var flipped = false, curPos = pos;\n    var dir = bias || 1;\n    doc.cantEdit = false;\n    search: for (;;) {\n      var line = getLine(doc, curPos.line);\n      if (line.markedSpans) {\n        for (var i = 0; i < line.markedSpans.length; ++i) {\n          var sp = line.markedSpans[i], m = sp.marker;\n          if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&\n              (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {\n            if (mayClear) {\n              signal(m, \"beforeCursorEnter\");\n              if (m.explicitlyCleared) {\n                if (!line.markedSpans) break;\n                else {--i; continue;}\n              }\n            }\n            if (!m.atomic) continue;\n            var newPos = m.find(dir < 0 ? -1 : 1);\n            if (cmp(newPos, curPos) == 0) {\n              newPos.ch += dir;\n              if (newPos.ch < 0) {\n                if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1));\n                else newPos = null;\n              } else if (newPos.ch > line.text.length) {\n                if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0);\n                else newPos = null;\n              }\n              if (!newPos) {\n                if (flipped) {\n                  // Driven in a corner -- no valid cursor position found at all\n                  // -- try again *with* clearing, if we didn't already\n                  if (!mayClear) return skipAtomic(doc, pos, bias, true);\n                  // Otherwise, turn off editing until further notice, and return the start of the doc\n                  doc.cantEdit = true;\n                  return Pos(doc.first, 0);\n                }\n                flipped = true; newPos = pos; dir = -dir;\n              }\n            }\n            curPos = newPos;\n            continue search;\n          }\n        }\n      }\n      return curPos;\n    }\n  }\n\n  // SELECTION DRAWING\n\n  // Redraw the selection and/or cursor\n  function updateSelection(cm) {\n    var display = cm.display, doc = cm.doc;\n    var curFragment = document.createDocumentFragment();\n    var selFragment = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      var collapsed = range.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        drawSelectionCursor(cm, range, curFragment);\n      if (!collapsed)\n        drawSelectionRange(cm, range, selFragment);\n    }\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      var top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                     headPos.top + lineOff.top - wrapOff.top));\n      var left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                      headPos.left + lineOff.left - wrapOff.left));\n      display.inputDiv.style.top = top + \"px\";\n      display.inputDiv.style.left = left + \"px\";\n    }\n\n    removeChildrenAndAdd(display.cursorDiv, curFragment);\n    removeChildrenAndAdd(display.selectionDiv, selFragment);\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, range, output) {\n    var pos = cursorCoords(cm, range.head, \"div\");\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left, rightSide = display.lineSpace.offsetWidth - padding.right;\n\n    function add(left, top, width, bottom) {\n      if (top < 0) top = 0;\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left +\n                               \"px; top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) +\n                               \"px; height: \" + (bottom - top) + \"px\"));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n      }\n\n      iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {\n        var leftPos = coords(from, \"left\"), rightPos, left, right;\n        if (from == to) {\n          rightPos = leftPos;\n          left = right = leftPos.left;\n        } else {\n          rightPos = coords(to - 1, \"right\");\n          if (dir == \"rtl\") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }\n          left = leftPos.left;\n          right = rightPos.right;\n        }\n        if (fromArg == null && from == 0) left = leftSide;\n        if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part\n          add(left, leftPos.top, null, leftPos.bottom);\n          left = leftSide;\n          if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);\n        }\n        if (toArg == null && to == lineLen) right = rightSide;\n        if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)\n          start = leftPos;\n        if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)\n          end = rightPos;\n        if (left < leftSide + 1) left = leftSide;\n        add(left, rightPos.top, right - left, rightPos.bottom);\n      });\n      return {start: start, end: end};\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        add(leftSide, leftEnd.bottom, null, rightStart.top);\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) return;\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      display.blinker = setInterval(function() {\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate);\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)\n      cm.state.highlight.set(time, bind(highlightWorker, cm));\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.frontier < doc.first) doc.frontier = doc.first;\n    if (doc.frontier >= cm.display.viewTo) return;\n    var end = +new Date + cm.options.workTime;\n    var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));\n\n    runInOp(cm, function() {\n    doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) {\n      if (doc.frontier >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var highlighted = highlightLine(cm, line, state, true);\n        line.styles = highlighted.styles;\n        if (highlighted.classes) line.styleClasses = highlighted.classes;\n        else if (line.styleClasses) line.styleClasses = null;\n        var ischange = !oldStyles || oldStyles.length != line.styles.length;\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];\n        if (ischange) regLineChange(cm, doc.frontier, \"text\");\n        line.stateAfter = copyState(doc.mode, state);\n      } else {\n        processLine(cm, line.text, state);\n        line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;\n      }\n      ++doc.frontier;\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true;\n      }\n    });\n    });\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) return doc.first;\n      var line = getLine(doc, search - 1);\n      if (line.stateAfter && (!precise || search <= doc.frontier)) return search;\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline;\n  }\n\n  function getStateBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) return true;\n    var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;\n    if (!state) state = startState(doc.mode);\n    else state = copyState(doc.mode, state);\n    doc.iter(pos, n, function(line) {\n      processLine(cm, line.text, state);\n      var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo;\n      line.stateAfter = save ? copyState(doc.mode, state) : null;\n      ++pos;\n    });\n    if (precise) doc.frontier = pos;\n    return state;\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop;}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}\n  function paddingH(display) {\n    if (display.cachedPaddingH) return display.cachedPaddingH;\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data;\n    return data;\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && cm.display.scroller.clientWidth;\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            heights.push((cur.bottom + next.top) / 2 - rect.top);\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      return {map: lineView.measure.map, cache: lineView.measure.cache};\n    for (var i = 0; i < lineView.rest.length; i++)\n      if (lineView.rest[i] == line)\n        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};\n    for (var i = 0; i < lineView.rest.length; i++)\n      if (lineNo(lineView.rest[i]) > lineN)\n        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view;\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      return cm.display.view[findViewIndex(cm, lineN)];\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      return ext;\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text)\n      view = null;\n    else if (view && view.changes)\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n    if (!view)\n      view = updateExternalMeasurement(cm, line);\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    };\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias) {\n    if (prepared.before) ch = -1;\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        prepared.rect = prepared.view.text.getBoundingClientRect();\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) prepared.cache[key] = found;\n    }\n    return {left: found.left, right: found.right, top: found.top, bottom: found.bottom};\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var map = prepared.map;\n\n    var node, start, end, collapse;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      var mStart = map[i], mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) collapse = \"right\";\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          collapse = bias;\n        if (bias == \"left\" && start == 0)\n          while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          }\n        if (bias == \"right\" && start == mEnd - mStart)\n          while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          }\n        break;\n      }\n    }\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start;\n      while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end;\n      if (ie_upto8 && start == 0 && end == mEnd - mStart) {\n        rect = node.parentNode.getBoundingClientRect();\n      } else if (ie && cm.options.lineWrapping) {\n        var rects = range(node, start, end).getClientRects();\n        if (rects.length)\n          rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n        else\n          rect = nullRect;\n      } else {\n        rect = range(node, start, end).getBoundingClientRect() || nullRect;\n      }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) collapse = bias = \"right\";\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n      else\n        rect = node.getBoundingClientRect();\n    }\n    if (ie_upto8 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};\n      else\n        rect = nullRect;\n    }\n\n    var top, bot = (rect.bottom + rect.top) / 2 - prepared.rect.top;\n    var heights = prepared.view.measure.heights;\n    for (var i = 0; i < heights.length - 1; i++)\n      if (bot < heights[i]) break;\n    top = i ? heights[i - 1] : 0; bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) result.bogus = true;\n    return result;\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n        lineView.measure.caches[i] = {};\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      clearLineMeasurementCacheFor(cm.display.view[i]);\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }\n  function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"/null (editor), or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context) {\n    if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {\n      var size = widgetHeight(lineObj.widgets[i]);\n      rect.top += size; rect.bottom += size;\n    }\n    if (context == \"line\") return rect;\n    if (!context) context = \"local\";\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") yOff += paddingTop(cm.display);\n    else yOff -= cm.display.viewOffset;\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect;\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"/null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") return coords;\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) lineObj = getLine(cm.doc, pos.line);\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\");\n      if (right) m.left = m.right; else m.right = m.left;\n      return intoCoordSystem(cm, lineObj, m, context);\n    }\n    function getBidi(ch, partPos) {\n      var part = order[partPos], right = part.level % 2;\n      if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {\n        part = order[--partPos];\n        ch = bidiRight(part) - (part.level % 2 ? 0 : 1);\n        right = true;\n      } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {\n        part = order[++partPos];\n        ch = bidiLeft(part) - part.level % 2;\n        right = false;\n      }\n      if (right && ch == part.to && ch > part.from) return get(ch - 1);\n      return get(ch, right);\n    }\n    var order = getOrder(lineObj), ch = pos.ch;\n    if (!order) return get(ch);\n    var partPos = getBidiPartAt(order, ch);\n    var val = getBidi(ch, partPos);\n    if (bidiOther != null) val.other = getBidi(ch, bidiOther);\n    return val;\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0, pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch;\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height};\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, outside, xRel) {\n    var pos = Pos(line, ch);\n    pos.xRel = xRel;\n    if (outside) pos.outside = true;\n    return pos;\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) return PosWithInfo(doc.first, 0, true, -1);\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);\n    if (x < 0) x = 0;\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var merged = collapsedSpanAtEnd(lineObj);\n      var mergedPos = merged && merged.find(0, true);\n      if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n        lineN = lineNo(lineObj = mergedPos.to.line);\n      else\n        return found;\n    }\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    var innerOff = y - heightAtLine(lineObj);\n    var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n\n    function getX(ch) {\n      var sp = cursorCoords(cm, Pos(lineNo, ch), \"line\", lineObj, preparedMeasure);\n      wrongLine = true;\n      if (innerOff > sp.bottom) return sp.left - adjust;\n      else if (innerOff < sp.top) return sp.left + adjust;\n      else wrongLine = false;\n      return sp.left;\n    }\n\n    var bidi = getOrder(lineObj), dist = lineObj.text.length;\n    var from = lineLeft(lineObj), to = lineRight(lineObj);\n    var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;\n\n    if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);\n    // Do a binary search between these bounds.\n    for (;;) {\n      if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {\n        var ch = x < fromX || x - fromX <= toX - x ? from : to;\n        var xDiff = x - (ch == from ? fromX : toX);\n        while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;\n        var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,\n                              xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);\n        return pos;\n      }\n      var step = Math.ceil(dist / 2), middle = from + step;\n      if (bidi) {\n        middle = from;\n        for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);\n      }\n      var middleX = getX(middle);\n      if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}\n      else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}\n    }\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) return display.cachedTextHeight;\n    if (measureText == null) {\n      measureText = elt(\"pre\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) display.cachedTextHeight = height;\n    removeChildren(display.measure);\n    return height || 1;\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) return display.cachedCharWidth;\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor]);\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) display.cachedCharWidth = width;\n    return width || 10;\n  }\n\n  // OPERATIONS\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: null,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      id: ++nextOpId           // Unique ID\n    };\n    if (!delayedCallbackDepth++) delayedCallbacks = [];\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp, doc = cm.doc, display = cm.display;\n    cm.curOp = null;\n\n    if (op.updateMaxLine) findMaxLine(cm);\n\n    // If it looks like an update might be needed, call updateDisplay\n    if (op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n        op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                           op.scrollToPos.to.line >= display.viewTo) ||\n        display.maxLineChanged && cm.options.lineWrapping) {\n      var updated = updateDisplay(cm, {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n      if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop;\n    }\n    // If no update was run, but the selection changed, redraw that.\n    if (!updated && op.selectionChanged) updateSelection(cm);\n    if (!updated && op.startHeight != cm.doc.height) updateScrollbars(cm);\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null && display.scroller.scrollTop != op.scrollTop) {\n      var top = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop));\n      display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = top;\n    }\n    if (op.scrollLeft != null && display.scroller.scrollLeft != op.scrollLeft) {\n      var left = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft));\n      display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = left;\n      alignHorizontally(cm);\n    }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var coords = scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos.from),\n                                     clipPos(cm.doc, op.scrollToPos.to), op.scrollToPos.margin);\n      if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords);\n    }\n\n    if (op.selectionChanged) restartBlink(cm);\n\n    if (cm.state.focused && op.updateInput)\n      resetInput(cm, op.typing);\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) for (var i = 0; i < hidden.length; ++i)\n      if (!hidden[i].lines.length) signal(hidden[i], \"hide\");\n    if (unhidden) for (var i = 0; i < unhidden.length; ++i)\n      if (unhidden[i].lines.length) signal(unhidden[i], \"unhide\");\n\n    var delayed;\n    if (!--delayedCallbackDepth) {\n      delayed = delayedCallbacks;\n      delayedCallbacks = null;\n    }\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      signal(cm, \"changes\", cm, op.changeObjs);\n    if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i]();\n    if (op.cursorActivityHandlers)\n      for (var i = 0; i < op.cursorActivityHandlers.length; i++)\n        op.cursorActivityHandlers[i](cm);\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) return f();\n    startOperation(cm);\n    try { return f(); }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) return f.apply(cm, arguments);\n      startOperation(cm);\n      try { return f.apply(cm, arguments); }\n      finally { endOperation(cm); }\n    };\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) return f.apply(this, arguments);\n      startOperation(this);\n      try { return f.apply(this, arguments); }\n      finally { endOperation(this); }\n    };\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) return f.apply(this, arguments);\n      startOperation(cm);\n      try { return f.apply(this, arguments); }\n      finally { endOperation(cm); }\n    };\n  }\n\n  // VIEW TRACKING\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array;\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) from = cm.doc.first;\n    if (to == null) to = cm.doc.first + cm.doc.size;\n    if (!lendiff) lendiff = 0;\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      display.updateLineNumbers = from;\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        resetView(cm);\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut = viewCuttingPoint(cm, from, from, -1);\n      if (cut) {\n        display.view = display.view.slice(0, cut.index);\n        display.viewTo = cut.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        ext.lineN += lendiff;\n      else if (from < ext.lineN + ext.size)\n        display.externalMeasured = null;\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      display.externalMeasured = null;\n\n    if (line < display.viewFrom || line >= display.viewTo) return;\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) return;\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) arr.push(type);\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) return null;\n    n -= cm.display.viewFrom;\n    if (n < 0) return null;\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) return i;\n    }\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      return {index: index, lineN: newN};\n    for (var i = 0, n = cm.display.viewFrom; i < index; i++)\n      n += view[i].size;\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) return null;\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) return null;\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN};\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n      else if (display.viewFrom < from)\n        display.view = display.view.slice(findViewIndex(cm, from));\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n      else if (display.viewTo > to)\n        display.view = display.view.slice(0, findViewIndex(cm, to));\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty;\n    }\n    return dirty;\n  }\n\n  // INPUT HANDLING\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  function slowPoll(cm) {\n    if (cm.display.pollingFast) return;\n    cm.display.poll.set(cm.options.pollInterval, function() {\n      readInput(cm);\n      if (cm.state.focused) slowPoll(cm);\n    });\n  }\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  function fastPoll(cm) {\n    var missed = false;\n    cm.display.pollingFast = true;\n    function p() {\n      var changed = readInput(cm);\n      if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);}\n      else {cm.display.pollingFast = false; slowPoll(cm);}\n    }\n    cm.display.poll.set(20, p);\n  }\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  function readInput(cm) {\n    var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput)\n      return false;\n    // See paste handler for more on the fakedLastChar kludge\n    if (cm.state.pasteIncoming && cm.state.fakedLastChar) {\n      input.value = input.value.substring(0, input.value.length - 1);\n      cm.state.fakedLastChar = false;\n    }\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) return false;\n    // Work around nonsensical selection resetting in IE9/10\n    if (ie && !ie_upto8 && cm.display.inputHasSelection === text) {\n      resetInput(cm);\n      return false;\n    }\n\n    var withOp = !cm.curOp;\n    if (withOp) startOperation(cm);\n    cm.display.shift = false;\n\n    if (text.charCodeAt(0) == 0x200b && doc.sel == cm.display.selForContextMenu && !prevInput)\n      prevInput = \"\\u200b\";\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;\n    var inserted = text.slice(same), textLines = splitLines(inserted);\n\n    // When pasing N lines into N selections, insert one line per selection\n    var multiPaste = cm.state.pasteIncoming && textLines.length > 1 && doc.sel.ranges.length == textLines.length;\n\n    // Normal behavior is to insert the new text into every selection\n    for (var i = doc.sel.ranges.length - 1; i >= 0; i--) {\n      var range = doc.sel.ranges[i];\n      var from = range.from(), to = range.to();\n      // Handle deletion\n      if (same < prevInput.length)\n        from = Pos(from.line, from.ch - (prevInput.length - same));\n      // Handle overwrite\n      else if (cm.state.overwrite && range.empty() && !cm.state.pasteIncoming)\n        to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n      var updateInput = cm.curOp.updateInput;\n      var changeEvent = {from: from, to: to, text: multiPaste ? [textLines[i]] : textLines,\n                         origin: cm.state.pasteIncoming ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\"};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n      // When an 'electric' character is inserted, immediately trigger a reindent\n      if (inserted && !cm.state.pasteIncoming && cm.options.electricChars &&\n          cm.options.smartIndent && range.head.ch < 100 &&\n          (!i || doc.sel.ranges[i - 1].head.line != range.head.line)) {\n        var mode = cm.getModeAt(range.head);\n        if (mode.electricChars) {\n          for (var j = 0; j < mode.electricChars.length; j++)\n            if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n              indentLine(cm, range.head.line, \"smart\");\n              break;\n            }\n        } else if (mode.electricInput) {\n          var end = changeEnd(changeEvent);\n          if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch)))\n            indentLine(cm, range.head.line, \"smart\");\n        }\n      }\n    }\n    ensureCursorVisible(cm);\n    cm.curOp.updateInput = updateInput;\n    cm.curOp.typing = true;\n\n    // Don't leave long text in the textarea, since it makes further polling slow\n    if (text.length > 1000 || text.indexOf(\"\\n\") > -1) input.value = cm.display.prevInput = \"\";\n    else cm.display.prevInput = text;\n    if (withOp) endOperation(cm);\n    cm.state.pasteIncoming = cm.state.cutIncoming = false;\n    return true;\n  }\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  function resetInput(cm, typing) {\n    var minimal, selected, doc = cm.doc;\n    if (cm.somethingSelected()) {\n      cm.display.prevInput = \"\";\n      var range = doc.sel.primary();\n      minimal = hasCopyEvent &&\n        (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000);\n      var content = minimal ? \"-\" : selected || cm.getSelection();\n      cm.display.input.value = content;\n      if (cm.state.focused) selectInput(cm.display.input);\n      if (ie && !ie_upto8) cm.display.inputHasSelection = content;\n    } else if (!typing) {\n      cm.display.prevInput = cm.display.input.value = \"\";\n      if (ie && !ie_upto8) cm.display.inputHasSelection = null;\n    }\n    cm.display.inaccurateSelection = minimal;\n  }\n\n  function focusInput(cm) {\n    if (cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != cm.display.input))\n      cm.display.input.focus();\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.state.focused) { focusInput(cm); onFocus(cm); }\n  }\n\n  function isReadOnly(cm) {\n    return cm.options.readOnly || cm.doc.cantEdit;\n  }\n\n  // EVENT HANDLERS\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie_upto10)\n      on(d.scroller, \"dblclick\", operation(cm, function(e) {\n        if (signalDOMEvent(cm, e)) return;\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;\n        e_preventDefault(e);\n        var word = findWordAt(cm, pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      }));\n    else\n      on(d.scroller, \"dblclick\", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });\n    // Prevent normal selection in the editor (we handle our own)\n    on(d.lineSpace, \"selectstart\", function(e) {\n      if (!eventInWidget(d, e)) e_preventDefault(e);\n    });\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    if (!captureRightClick) on(d.scroller, \"contextmenu\", function(e) {onContextMenu(cm, e);});\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function() {\n      if (d.scroller.clientHeight) {\n        setScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n    on(d.scrollbarV, \"scroll\", function() {\n      if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop);\n    });\n    on(d.scrollbarH, \"scroll\", function() {\n      if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft);\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function(e){onScrollWheel(cm, e);});\n    on(d.scroller, \"DOMMouseScroll\", function(e){onScrollWheel(cm, e);});\n\n    // Prevent clicks in the scrollbars from killing focus\n    function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); }\n    on(d.scrollbarH, \"mousedown\", reFocus);\n    on(d.scrollbarV, \"mousedown\", reFocus);\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    on(d.input, \"keyup\", operation(cm, onKeyUp));\n    on(d.input, \"input\", function() {\n      if (ie && !ie_upto8 && cm.display.inputHasSelection) cm.display.inputHasSelection = null;\n      fastPoll(cm);\n    });\n    on(d.input, \"keydown\", operation(cm, onKeyDown));\n    on(d.input, \"keypress\", operation(cm, onKeyPress));\n    on(d.input, \"focus\", bind(onFocus, cm));\n    on(d.input, \"blur\", bind(onBlur, cm));\n\n    function drag_(e) {\n      if (!signalDOMEvent(cm, e)) e_stop(e);\n    }\n    if (cm.options.dragDrop) {\n      on(d.scroller, \"dragstart\", function(e){onDragStart(cm, e);});\n      on(d.scroller, \"dragenter\", drag_);\n      on(d.scroller, \"dragover\", drag_);\n      on(d.scroller, \"drop\", operation(cm, onDrop));\n    }\n    on(d.scroller, \"paste\", function(e) {\n      if (eventInWidget(d, e)) return;\n      cm.state.pasteIncoming = true;\n      focusInput(cm);\n      fastPoll(cm);\n    });\n    on(d.input, \"paste\", function() {\n      // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206\n      // Add a char to the end of textarea before paste occur so that\n      // selection doesn't span to the end of textarea.\n      if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) {\n        var start = d.input.selectionStart, end = d.input.selectionEnd;\n        d.input.value += \"$\";\n        d.input.selectionStart = start;\n        d.input.selectionEnd = end;\n        cm.state.fakedLastChar = true;\n      }\n      cm.state.pasteIncoming = true;\n      fastPoll(cm);\n    });\n\n    function prepareCopyCut(e) {\n      if (cm.somethingSelected()) {\n        if (d.inaccurateSelection) {\n          d.prevInput = \"\";\n          d.inaccurateSelection = false;\n          d.input.value = cm.getSelection();\n          selectInput(d.input);\n        }\n      } else {\n        var text = \"\", ranges = [];\n        for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n          var line = cm.doc.sel.ranges[i].head.line;\n          var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n          ranges.push(lineRange);\n          text += cm.getRange(lineRange.anchor, lineRange.head);\n        }\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges, null, sel_dontScroll);\n        } else {\n          d.prevInput = \"\";\n          d.input.value = text;\n          selectInput(d.input);\n        }\n      }\n      if (e.type == \"cut\") cm.state.cutIncoming = true;\n    }\n    on(d.input, \"cut\", prepareCopyCut);\n    on(d.input, \"copy\", prepareCopyCut);\n\n    // Needed to handle Tab key in KHTML\n    if (khtml) on(d.sizer, \"mouseup\", function() {\n      if (activeElt() == d.input) d.input.blur();\n      focusInput(cm);\n    });\n  }\n\n  // Called when the window resizes\n  function onResize(cm) {\n    // Might be a text scaling operation, clear size caches.\n    var d = cm.display;\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    cm.setSize();\n  }\n\n  // MOUSE EVENTS\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true;\n    }\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal) {\n      var target = e_target(e);\n      if (target == display.scrollbarH || target == display.scrollbarV ||\n          target == display.scrollbarFiller || target == display.gutterFiller) return null;\n    }\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e) { return null; }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords;\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    if (signalDOMEvent(this, e)) return;\n    var cm = this, display = cm.display;\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function(){display.scroller.draggable = true;}, 100);\n      }\n      return;\n    }\n    if (clickInGutter(cm, e)) return;\n    var start = posFromMouse(cm, e);\n    window.focus();\n\n    switch (e_button(e)) {\n    case 1:\n      if (start)\n        leftButtonDown(cm, e, start);\n      else if (e_target(e) == display.scroller)\n        e_preventDefault(e);\n      break;\n    case 2:\n      if (webkit) cm.state.lastMiddleDown = +new Date;\n      if (start) extendSelection(cm.doc, start);\n      setTimeout(bind(focusInput, cm), 20);\n      e_preventDefault(e);\n      break;\n    case 3:\n      if (captureRightClick) onContextMenu(cm, e);\n      break;\n    }\n  }\n\n  var lastClick, lastDoubleClick;\n  function leftButtonDown(cm, e, start) {\n    setTimeout(bind(ensureFocus, cm), 0);\n\n    var now = +new Date, type;\n    if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {\n      type = \"triple\";\n    } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {\n      type = \"double\";\n      lastDoubleClick = {time: now, pos: start};\n    } else {\n      type = \"single\";\n      lastClick = {time: now, pos: start};\n    }\n\n    var sel = cm.doc.sel, addNew = mac ? e.metaKey : e.ctrlKey;\n    if (cm.options.dragDrop && dragAndDrop && !addNew && !isReadOnly(cm) &&\n        type == \"single\" && sel.contains(start) > -1 && sel.somethingSelected())\n      leftButtonStartDrag(cm, e, start);\n    else\n      leftButtonSelect(cm, e, start, type, addNew);\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, e, start) {\n    var display = cm.display;\n    var dragEnd = operation(cm, function(e2) {\n      if (webkit) display.scroller.draggable = false;\n      cm.state.draggingText = false;\n      off(document, \"mouseup\", dragEnd);\n      off(display.scroller, \"drop\", dragEnd);\n      if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n        e_preventDefault(e2);\n        extendSelection(cm.doc, start);\n        focusInput(cm);\n        // Work around unexplainable focus problem in IE9 (#2127)\n        if (ie_upto10 && !ie_upto8)\n          setTimeout(function() {document.body.focus(); focusInput(cm);}, 20);\n      }\n    });\n    // Let the drag handler handle this.\n    if (webkit) display.scroller.draggable = true;\n    cm.state.draggingText = dragEnd;\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) display.scroller.dragDrop();\n    on(document, \"mouseup\", dragEnd);\n    on(display.scroller, \"drop\", dragEnd);\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, e, start, type, addNew) {\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(e);\n\n    var ourRange, ourIndex, startSel = doc.sel;\n    if (addNew && !e.shiftKey) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        ourRange = doc.sel.ranges[ourIndex];\n      else\n        ourRange = new Range(start, start);\n    } else {\n      ourRange = doc.sel.primary();\n    }\n\n    if (e.altKey) {\n      type = \"rect\";\n      if (!addNew) ourRange = new Range(start, start);\n      start = posFromMouse(cm, e, true, true);\n      ourIndex = -1;\n    } else if (type == \"double\") {\n      var word = findWordAt(cm, start);\n      if (cm.display.shift || doc.extend)\n        ourRange = extendRange(doc, ourRange, word.anchor, word.head);\n      else\n        ourRange = word;\n    } else if (type == \"triple\") {\n      var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)));\n      if (cm.display.shift || doc.extend)\n        ourRange = extendRange(doc, ourRange, line.anchor, line.head);\n      else\n        ourRange = line;\n    } else {\n      ourRange = extendRange(doc, ourRange, start);\n    }\n\n    if (!addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex > -1) {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    } else {\n      ourIndex = doc.sel.ranges.length;\n      setSelection(doc, normalizeSelection(doc.sel.ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) return;\n      lastPos = pos;\n\n      if (type == \"rect\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n          else if (text.length > leftPos)\n            ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n        }\n        if (!ranges.length) ranges.push(new Range(start, start));\n        setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var anchor = oldRange.anchor, head = pos;\n        if (type != \"single\") {\n          if (type == \"double\")\n            var range = findWordAt(cm, pos);\n          else\n            var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0)));\n          if (cmp(range.anchor, anchor) > 0) {\n            head = range.head;\n            anchor = minPos(oldRange.from(), range.anchor);\n          } else {\n            head = range.anchor;\n            anchor = maxPos(oldRange.to(), range.head);\n          }\n        }\n        var ranges = startSel.ranges.slice(0);\n        ranges[ourIndex] = new Range(clipPos(doc, anchor), head);\n        setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, type == \"rect\");\n      if (!cur) return;\n      if (cmp(cur, lastPos) != 0) {\n        ensureFocus(cm);\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) setTimeout(operation(cm, function() {\n          if (counter != curCount) return;\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50);\n      }\n    }\n\n    function done(e) {\n      counter = Infinity;\n      e_preventDefault(e);\n      focusInput(cm);\n      off(document, \"mousemove\", move);\n      off(document, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function(e) {\n      if ((ie && !ie_upto9) ?  !e.buttons : !e_button(e)) done(e);\n      else extend(e);\n    });\n    var up = operation(cm, done);\n    on(document, \"mousemove\", move);\n    on(document, \"mouseup\", up);\n  }\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent, signalfn) {\n    try { var mX = e.clientX, mY = e.clientY; }\n    catch(e) { return false; }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false;\n    if (prevent) e_preventDefault(e);\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e);\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.options.gutters.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.options.gutters[i];\n        signalfn(cm, type, cm, line, gutter, e);\n        return e_defaultPrevented(e);\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true, signalLater);\n  }\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      return;\n    e_preventDefault(e);\n    if (ie) lastDrop = +new Date;\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || isReadOnly(cm)) return;\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var loadFile = function(file, i) {\n        var reader = new FileReader;\n        reader.onload = operation(cm, function() {\n          text[i] = reader.result;\n          if (++read == n) {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos, text: splitLines(text.join(\"\\n\")), origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n          }\n        });\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < n; ++i) loadFile(files[i], i);\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(bind(focusInput, cm), 20);\n        return;\n      }\n      try {\n        var text = e.dataTransfer.getData(\"Text\");\n        if (text) {\n          var selected = cm.state.draggingText && cm.listSelections();\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) for (var i = 0; i < selected.length; ++i)\n            replaceRange(cm.doc, \"\", selected[i].anchor, selected[i].head, \"drag\");\n          cm.replaceSelection(text, \"around\", \"paste\");\n          focusInput(cm);\n        }\n      }\n      catch(e){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) img.parentNode.removeChild(img);\n    }\n  }\n\n  // SCROLL EVENTS\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function setScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) return;\n    cm.doc.scrollTop = val;\n    if (!gecko) updateDisplay(cm, {top: val});\n    if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;\n    if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val;\n    if (gecko) updateDisplay(cm);\n    startWorker(cm, 100);\n  }\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller) {\n    if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;\n    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;\n    if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val;\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) wheelPixelsPerUnit = -.53;\n  else if (gecko) wheelPixelsPerUnit = 15;\n  else if (chrome) wheelPixelsPerUnit = -.7;\n  else if (safari) wheelPixelsPerUnit = -1/3;\n\n  function onScrollWheel(cm, e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;\n    else if (dy == null) dy = e.wheelDelta;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    if (!(dx && scroll.scrollWidth > scroll.clientWidth ||\n          dy && scroll.scrollHeight > scroll.clientHeight)) return;\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer;\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy)\n        setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));\n      setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));\n      e_preventDefault(e);\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return;\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) top = Math.max(0, top + pixels - 50);\n      else bot = Math.min(cm.doc.height, bot + pixels + 50);\n      updateDisplay(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function() {\n          if (display.wheelStartX == null) return;\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) return;\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // KEY EVENTS\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) return false;\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false;\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (isReadOnly(cm)) cm.state.suppressEdits = true;\n      if (dropShift) cm.display.shift = false;\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done;\n  }\n\n  // Collect the currently active keymaps.\n  function allKeyMaps(cm) {\n    var maps = cm.state.keyMaps.slice(0);\n    if (cm.options.extraKeys) maps.push(cm.options.extraKeys);\n    maps.push(cm.options.keyMap);\n    return maps;\n  }\n\n  var maybeTransition;\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    // Handle automatic keymap transitions\n    var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto;\n    clearTimeout(maybeTransition);\n    if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() {\n      if (getKeyMap(cm.options.keyMap) == startMap) {\n        cm.options.keyMap = (next.call ? next.call(null, cm) : next);\n        keyMapChanged(cm);\n      }\n    }, 50);\n\n    var name = keyName(e, true), handled = false;\n    if (!name) return false;\n    var keymaps = allKeyMaps(cm);\n\n    if (e.shiftKey) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      handled = lookupKey(\"Shift-\" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);})\n             || lookupKey(name, keymaps, function(b) {\n                  if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                    return doHandleBinding(cm, b);\n                });\n    } else {\n      handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); });\n    }\n\n    if (handled) {\n      e_preventDefault(e);\n      restartBlink(cm);\n      signalLater(cm, \"keyHandled\", cm, name, e);\n    }\n    return handled;\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    var handled = lookupKey(\"'\" + ch + \"'\", allKeyMaps(cm),\n                            function(b) { return doHandleBinding(cm, b, true); });\n    if (handled) {\n      e_preventDefault(e);\n      restartBlink(cm);\n      signalLater(cm, \"keyHandled\", cm, \"'\" + ch + \"'\", e);\n    }\n    return handled;\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    ensureFocus(cm);\n    if (signalDOMEvent(cm, e)) return;\n    // IE does strange things with escape.\n    if (ie_upto10 && e.keyCode == 27) e.returnValue = false;\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        cm.replaceSelection(\"\", null, \"cut\");\n    }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      showCrossHair(cm);\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (signalDOMEvent(this, e)) return;\n    if (e.keyCode == 16) this.doc.sel.shift = false;\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (signalDOMEvent(cm, e)) return;\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n    if (((presto && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    if (handleCharBinding(cm, e, ch)) return;\n    if (ie && !ie_upto8) cm.display.inputHasSelection = null;\n    fastPoll(cm);\n  }\n\n  // FOCUS/BLUR EVENTS\n\n  function onFocus(cm) {\n    if (cm.options.readOnly == \"nocursor\") return;\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // The prevInput test prevents this from firing when a context\n      // menu is closed (since the resetInput would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        resetInput(cm);\n        if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730\n      }\n    }\n    slowPoll(cm);\n    restartBlink(cm);\n  }\n  function onBlur(cm) {\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150);\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (signalDOMEvent(cm, e, \"contextmenu\")) return;\n    var display = cm.display;\n    if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return;\n\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) return; // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n\n    var oldCSS = display.input.style.cssText;\n    display.inputDiv.style.position = \"absolute\";\n    display.input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\n      \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: \" +\n      (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") +\n      \"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    focusInput(cm);\n    resetInput(cm);\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) display.input.value = display.prevInput = \" \";\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (display.input.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = display.input.value = \"\\u200b\" + (selected ? display.input.value : \"\");\n        display.prevInput = selected ? \"\" : \"\\u200b\";\n        display.input.selectionStart = 1; display.input.selectionEnd = extval.length;\n      }\n    }\n    function rehide() {\n      display.inputDiv.style.position = \"relative\";\n      display.input.style.cssText = oldCSS;\n      if (ie_upto8) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos;\n      slowPoll(cm);\n\n      // Try to detect the user choosing select-all\n      if (display.input.selectionStart != null) {\n        if (!ie || ie_upto8) prepareSelectAllHack();\n        var i = 0, poll = function() {\n          if (display.selForContextMenu == cm.doc.sel && display.input.selectionStart == 0)\n            operation(cm, commands.selectAll)(cm);\n          else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500);\n          else resetInput(cm);\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && !ie_upto8) prepareSelectAllHack();\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function() {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) return false;\n    return gutterEvent(cm, e, \"gutterContextMenu\", false, signal);\n  }\n\n  // UPDATING\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  var changeEnd = CodeMirror.changeEnd = function(change) {\n    if (!change.text) return change.to;\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n  };\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) return pos;\n    if (cmp(pos, change.to) <= 0) return changeEnd(change);\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch;\n    return Pos(line, ch);\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(out, doc.sel.primIndex);\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      return Pos(nw.line, pos.ch - old.ch + nw.ch);\n    else\n      return Pos(nw.line + (pos.line - old.line), pos.ch);\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex);\n  }\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function() { this.canceled = true; }\n    };\n    if (update) obj.update = function(from, to, text, origin) {\n      if (from) this.from = clipPos(doc, from);\n      if (to) this.to = clipPos(doc, to);\n      if (text) this.text = text;\n      if (origin !== undefined) this.origin = origin;\n    };\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeChange\", doc.cm, obj);\n\n    if (obj.canceled) return null;\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n      if (doc.cm.state.suppressEdits) return;\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) return;\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text});\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) return;\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function(doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    if (doc.cm && doc.cm.state.suppressEdits) return;\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    for (var i = 0; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        break;\n    }\n    if (i == source.length) return;\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return;\n        }\n        selAfter = event;\n      }\n      else break;\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    for (var i = event.changes.length - 1; i >= 0; --i) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return;\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change, null) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) doc.cm.scrollIntoView(change);\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function(doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) return;\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function(range) {\n      return new Range(Pos(range.anchor.line + distance, range.anchor.ch),\n                       Pos(range.head.line + distance, range.head.ch));\n    }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        regLineChange(doc.cm, l, \"gutter\");\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return;\n    }\n    if (change.from.line > doc.lastLine()) return;\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) selAfter = computeSelAfterChange(doc, change, null);\n    if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans);\n    else updateDoc(doc, change, spans);\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function(line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true;\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      signalCursorActivity(cm);\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function(line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) cm.curOp.updateMaxLine = true;\n    }\n\n    // Adjust frontier, schedule worker\n    doc.frontier = Math.min(doc.frontier, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      regLineChange(cm, from.line, \"text\");\n    else\n      regChange(cm, from.line, to.line + 1, lendiff);\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) signalLater(cm, \"change\", cm, obj);\n      if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    if (!to) to = from;\n    if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; }\n    if (typeof code == \"string\") code = splitLines(code);\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, coords) {\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (coords.top + box.top < 0) doScroll = true;\n    else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, \"position: absolute; top: \" +\n                           (coords.top - display.viewOffset - paddingTop(cm.display)) + \"px; height: \" +\n                           (coords.bottom - coords.top + scrollerCutOff) + \"px; left: \" +\n                           coords.left + \"px; width: 2px;\");\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) margin = 0;\n    for (;;) {\n      var changed = false, coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),\n                                         Math.min(coords.top, endCoords.top) - margin,\n                                         Math.max(coords.left, endCoords.left),\n                                         Math.max(coords.bottom, endCoords.bottom) + margin);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        setScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;\n      }\n      if (!changed) return coords;\n    }\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, x1, y1, x2, y2) {\n    var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);\n    if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);\n    if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, x1, y1, x2, y2) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (y1 < 0) y1 = 0;\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = display.scroller.clientHeight - scrollerCutOff, result = {};\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;\n    if (y1 < screentop) {\n      result.scrollTop = atTop ? 0 : y1;\n    } else if (y2 > screentop + screen) {\n      var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);\n      if (newTop != screentop) result.scrollTop = newTop;\n    }\n\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n    var screenw = display.scroller.clientWidth - scrollerCutOff;\n    x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth;\n    var gutterw = display.gutters.offsetWidth;\n    var atLeft = x1 < gutterw + 10;\n    if (x1 < screenleft + gutterw || atLeft) {\n      if (atLeft) x1 = 0;\n      result.scrollLeft = Math.max(0, x1 - 10 - gutterw);\n    } else if (x2 > screenw + screenleft - 3) {\n      result.scrollLeft = x2 + 10 - screenw;\n    }\n    return result;\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollPos(cm, left, top) {\n    if (left != null || top != null) resolveScrollToPos(cm);\n    if (left != null)\n      cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left;\n    if (top != null)\n      cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor(), from = cur, to = cur;\n    if (!cm.options.lineWrapping) {\n      from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur;\n      to = Pos(cur.line, cur.ch + 1);\n    }\n    cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true};\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      var sPos = calculateScrollPos(cm, Math.min(from.left, to.left),\n                                    Math.min(from.top, to.top) - range.margin,\n                                    Math.max(from.right, to.right),\n                                    Math.max(from.bottom, to.bottom) + range.margin);\n      cm.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n    }\n  }\n\n  // API UTILITIES\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) how = \"add\";\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!cm.doc.mode.indent) how = \"prev\";\n      else state = getStateBefore(cm, n);\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) line.stateAfter = null;\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass) {\n        if (!aggressive) return;\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);\n      else indentation = 0;\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";}\n    if (pos < indentation) indentString += spaceStr(indentation - pos);\n\n    if (indentString != curSpaceString) {\n      replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i = 0; i < doc.sel.ranges.length; i++) {\n        var range = doc.sel.ranges[i];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i, new Range(pos, pos));\n          break;\n        }\n      }\n    }\n    line.stateAfter = null;\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(cm, handle, changeType, op) {\n    var no = handle, line = handle, doc = cm.doc;\n    if (typeof handle == \"number\") line = getLine(doc, clipLine(doc, handle));\n    else no = lineNo(handle);\n    if (no == null) return null;\n    if (op(line, no)) regLineChange(cm, no, changeType);\n    return line;\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break;\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function() {\n      for (var i = kill.length - 1; i >= 0; i--)\n        replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n      ensureCursorVisible(cm);\n    });\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"char\", \"column\" (like char, but doesn't\n  // cross line boundaries), \"word\" (across next word), or \"group\" (to\n  // the start of next group of word or non-word-non-whitespace\n  // chars). The visually param controls whether, in right-to-left\n  // text, direction 1 means to move towards the next index in the\n  // string, or towards the character to the right of the current\n  // position. The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var line = pos.line, ch = pos.ch, origDir = dir;\n    var lineObj = getLine(doc, line);\n    var possible = true;\n    function findNextLine() {\n      var l = line + dir;\n      if (l < doc.first || l >= doc.first + doc.size) return (possible = false);\n      line = l;\n      return lineObj = getLine(doc, l);\n    }\n    function moveOnce(boundToLine) {\n      var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);\n      if (next == null) {\n        if (!boundToLine && findNextLine()) {\n          if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);\n          else ch = dir < 0 ? lineObj.text.length : 0;\n        } else return (possible = false);\n      } else ch = next;\n      return true;\n    }\n\n    if (unit == \"char\") moveOnce();\n    else if (unit == \"column\") moveOnce(true);\n    else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) break;\n        var cur = lineObj.text.charAt(ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) type = \"s\";\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce();}\n          break;\n        }\n\n        if (type) sawType = type;\n        if (dir > 0 && !moveOnce(!first)) break;\n      }\n    }\n    var result = skipAtomic(doc, Pos(line, ch), origDir, true);\n    if (!possible) result.hitSide = true;\n    return result;\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    for (;;) {\n      var target = coordsChar(cm, x, y);\n      if (!target.outside) break;\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }\n      y += dir * 5;\n    }\n    return target;\n  }\n\n  // Find the word at the given position (as returned by coordsChar).\n  function findWordAt(cm, pos) {\n    var doc = cm.doc, line = getLine(doc, pos.line).text;\n    var start = pos.ch, end = pos.ch;\n    if (line) {\n      var helper = cm.getHelper(pos, \"wordChars\");\n      if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;\n      var startChar = line.charAt(start);\n      var check = isWordChar(startChar, helper)\n        ? function(ch) { return isWordChar(ch, helper); }\n        : /\\s/.test(startChar) ? function(ch) {return /\\s/.test(ch);}\n        : function(ch) {return !/\\s/.test(ch) && !isWordChar(ch);};\n      while (start > 0 && check(line.charAt(start - 1))) --start;\n      while (end < line.length && check(line.charAt(end))) ++end;\n    }\n    return new Range(Pos(pos.line, start), Pos(pos.line, end));\n  }\n\n  // EDITOR METHODS\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  CodeMirror.prototype = {\n    constructor: CodeMirror,\n    focus: function(){window.focus(); focusInput(this); fastPoll(this);},\n\n    setOption: function(option, value) {\n      var options = this.options, old = options[option];\n      if (options[option] == value && option != \"mode\") return;\n      options[option] = value;\n      if (optionHandlers.hasOwnProperty(option))\n        operation(this, optionHandlers[option])(this, value, old);\n    },\n\n    getOption: function(option) {return this.options[option];},\n    getDoc: function() {return this.doc;},\n\n    addKeyMap: function(map, bottom) {\n      this.state.keyMaps[bottom ? \"push\" : \"unshift\"](map);\n    },\n    removeKeyMap: function(map) {\n      var maps = this.state.keyMaps;\n      for (var i = 0; i < maps.length; ++i)\n        if (maps[i] == map || (typeof maps[i] != \"string\" && maps[i].name == map)) {\n          maps.splice(i, 1);\n          return true;\n        }\n    },\n\n    addOverlay: methodOp(function(spec, options) {\n      var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n      if (mode.startState) throw new Error(\"Overlays may not be stateful.\");\n      this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});\n      this.state.modeGen++;\n      regChange(this);\n    }),\n    removeOverlay: methodOp(function(spec) {\n      var overlays = this.state.overlays;\n      for (var i = 0; i < overlays.length; ++i) {\n        var cur = overlays[i].modeSpec;\n        if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n          overlays.splice(i, 1);\n          this.state.modeGen++;\n          regChange(this);\n          return;\n        }\n      }\n    }),\n\n    indentLine: methodOp(function(n, dir, aggressive) {\n      if (typeof dir != \"string\" && typeof dir != \"number\") {\n        if (dir == null) dir = this.options.smartIndent ? \"smart\" : \"prev\";\n        else dir = dir ? \"add\" : \"subtract\";\n      }\n      if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);\n    }),\n    indentSelection: methodOp(function(how) {\n      var ranges = this.doc.sel.ranges, end = -1;\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (!range.empty()) {\n          var start = Math.max(end, range.from().line);\n          var to = range.to();\n          end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n          for (var j = start; j < end; ++j)\n            indentLine(this, j, how);\n        } else if (range.head.line > end) {\n          indentLine(this, range.head.line, how, true);\n          end = range.head.line;\n          if (i == this.doc.sel.primIndex) ensureCursorVisible(this);\n        }\n      }\n    }),\n\n    // Fetch the parser token for a given character. Useful for hacks\n    // that want to inspect the mode state (say, for completion).\n    getTokenAt: function(pos, precise) {\n      var doc = this.doc;\n      pos = clipPos(doc, pos);\n      var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode;\n      var line = getLine(doc, pos.line);\n      var stream = new StringStream(line.text, this.options.tabSize);\n      while (stream.pos < pos.ch && !stream.eol()) {\n        stream.start = stream.pos;\n        var style = readToken(mode, stream, state);\n      }\n      return {start: stream.start,\n              end: stream.pos,\n              string: stream.current(),\n              type: style || null,\n              state: state};\n    },\n\n    getTokenTypeAt: function(pos) {\n      pos = clipPos(this.doc, pos);\n      var styles = getLineStyles(this, getLine(this.doc, pos.line));\n      var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n      var type;\n      if (ch == 0) type = styles[2];\n      else for (;;) {\n        var mid = (before + after) >> 1;\n        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;\n        else if (styles[mid * 2 + 1] < ch) before = mid + 1;\n        else { type = styles[mid * 2 + 2]; break; }\n      }\n      var cut = type ? type.indexOf(\"cm-overlay \") : -1;\n      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n    },\n\n    getModeAt: function(pos) {\n      var mode = this.doc.mode;\n      if (!mode.innerMode) return mode;\n      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n    },\n\n    getHelper: function(pos, type) {\n      return this.getHelpers(pos, type)[0];\n    },\n\n    getHelpers: function(pos, type) {\n      var found = [];\n      if (!helpers.hasOwnProperty(type)) return helpers;\n      var help = helpers[type], mode = this.getModeAt(pos);\n      if (typeof mode[type] == \"string\") {\n        if (help[mode[type]]) found.push(help[mode[type]]);\n      } else if (mode[type]) {\n        for (var i = 0; i < mode[type].length; i++) {\n          var val = help[mode[type][i]];\n          if (val) found.push(val);\n        }\n      } else if (mode.helperType && help[mode.helperType]) {\n        found.push(help[mode.helperType]);\n      } else if (help[mode.name]) {\n        found.push(help[mode.name]);\n      }\n      for (var i = 0; i < help._global.length; i++) {\n        var cur = help._global[i];\n        if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n          found.push(cur.val);\n      }\n      return found;\n    },\n\n    getStateAfter: function(line, precise) {\n      var doc = this.doc;\n      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n      return getStateBefore(this, line + 1, precise);\n    },\n\n    cursorCoords: function(start, mode) {\n      var pos, range = this.doc.sel.primary();\n      if (start == null) pos = range.head;\n      else if (typeof start == \"object\") pos = clipPos(this.doc, start);\n      else pos = start ? range.from() : range.to();\n      return cursorCoords(this, pos, mode || \"page\");\n    },\n\n    charCoords: function(pos, mode) {\n      return charCoords(this, clipPos(this.doc, pos), mode || \"page\");\n    },\n\n    coordsChar: function(coords, mode) {\n      coords = fromCoordSystem(this, coords, mode || \"page\");\n      return coordsChar(this, coords.left, coords.top);\n    },\n\n    lineAtHeight: function(height, mode) {\n      height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n      return lineAtHeight(this.doc, height + this.display.viewOffset);\n    },\n    heightAtLine: function(line, mode) {\n      var end = false, last = this.doc.first + this.doc.size - 1;\n      if (line < this.doc.first) line = this.doc.first;\n      else if (line > last) { line = last; end = true; }\n      var lineObj = getLine(this.doc, line);\n      return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\").top +\n        (end ? this.doc.height - heightAtLine(lineObj) : 0);\n    },\n\n    defaultTextHeight: function() { return textHeight(this.display); },\n    defaultCharWidth: function() { return charWidth(this.display); },\n\n    setGutterMarker: methodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function(line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) line.gutterMarkers = null;\n        return true;\n      });\n    }),\n\n    clearGutter: methodOp(function(gutterID) {\n      var cm = this, doc = cm.doc, i = doc.first;\n      doc.iter(function(line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          line.gutterMarkers[gutterID] = null;\n          regLineChange(cm, i, \"gutter\");\n          if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;\n        }\n        ++i;\n      });\n    }),\n\n    addLineClass: methodOp(function(handle, where, cls) {\n      return changeLine(this, handle, \"class\", function(line) {\n        var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : \"wrapClass\";\n        if (!line[prop]) line[prop] = cls;\n        else if (new RegExp(\"(?:^|\\\\s)\" + cls + \"(?:$|\\\\s)\").test(line[prop])) return false;\n        else line[prop] += \" \" + cls;\n        return true;\n      });\n    }),\n\n    removeLineClass: methodOp(function(handle, where, cls) {\n      return changeLine(this, handle, \"class\", function(line) {\n        var prop = where == \"text\" ? \"textClass\" : where == \"background\" ? \"bgClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) return false;\n        else if (cls == null) line[prop] = null;\n        else {\n          var found = cur.match(new RegExp(\"(?:^|\\\\s+)\" + cls + \"(?:$|\\\\s+)\"));\n          if (!found) return false;\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true;\n      });\n    }),\n\n    addLineWidget: methodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options);\n    }),\n\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    lineInfo: function(line) {\n      if (typeof line == \"number\") {\n        if (!isLine(this.doc, line)) return null;\n        var n = line;\n        line = getLine(this.doc, line);\n        if (!line) return null;\n      } else {\n        var n = lineNo(line);\n        if (n == null) return null;\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets};\n    },\n\n    getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};},\n\n    addWidget: function(pos, node, scroll, vert, horiz) {\n      var display = this.display;\n      pos = cursorCoords(this, clipPos(this.doc, pos));\n      var top = pos.bottom, left = pos.left;\n      node.style.position = \"absolute\";\n      display.sizer.appendChild(node);\n      if (vert == \"over\") {\n        top = pos.top;\n      } else if (vert == \"above\" || vert == \"near\") {\n        var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n        // Default to positioning above (if specified and possible); otherwise default to positioning below\n        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n          top = pos.top - node.offsetHeight;\n        else if (pos.bottom + node.offsetHeight <= vspace)\n          top = pos.bottom;\n        if (left + node.offsetWidth > hspace)\n          left = hspace - node.offsetWidth;\n      }\n      node.style.top = top + \"px\";\n      node.style.left = node.style.right = \"\";\n      if (horiz == \"right\") {\n        left = display.sizer.clientWidth - node.offsetWidth;\n        node.style.right = \"0px\";\n      } else {\n        if (horiz == \"left\") left = 0;\n        else if (horiz == \"middle\") left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n        node.style.left = left + \"px\";\n      }\n      if (scroll)\n        scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);\n    },\n\n    triggerOnKeyDown: methodOp(onKeyDown),\n    triggerOnKeyPress: methodOp(onKeyPress),\n    triggerOnKeyUp: methodOp(onKeyUp),\n\n    execCommand: function(cmd) {\n      if (commands.hasOwnProperty(cmd))\n        return commands[cmd](this);\n    },\n\n    findPosH: function(from, amount, unit, visually) {\n      var dir = 1;\n      if (amount < 0) { dir = -1; amount = -amount; }\n      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n        cur = findPosH(this.doc, cur, dir, unit, visually);\n        if (cur.hitSide) break;\n      }\n      return cur;\n    },\n\n    moveH: methodOp(function(dir, unit) {\n      var cm = this;\n      cm.extendSelectionsBy(function(range) {\n        if (cm.display.shift || cm.doc.extend || range.empty())\n          return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually);\n        else\n          return dir < 0 ? range.from() : range.to();\n      }, sel_move);\n    }),\n\n    deleteH: methodOp(function(dir, unit) {\n      var sel = this.doc.sel, doc = this.doc;\n      if (sel.somethingSelected())\n        doc.replaceSelection(\"\", null, \"+delete\");\n      else\n        deleteNearSelection(this, function(range) {\n          var other = findPosH(doc, range.head, dir, unit, false);\n          return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other};\n        });\n    }),\n\n    findPosV: function(from, amount, unit, goalColumn) {\n      var dir = 1, x = goalColumn;\n      if (amount < 0) { dir = -1; amount = -amount; }\n      for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n        var coords = cursorCoords(this, cur, \"div\");\n        if (x == null) x = coords.left;\n        else coords.left = x;\n        cur = findPosV(this, coords, dir, unit);\n        if (cur.hitSide) break;\n      }\n      return cur;\n    },\n\n    moveV: methodOp(function(dir, unit) {\n      var cm = this, doc = this.doc, goals = [];\n      var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected();\n      doc.extendSelectionsBy(function(range) {\n        if (collapse)\n          return dir < 0 ? range.from() : range.to();\n        var headPos = cursorCoords(cm, range.head, \"div\");\n        if (range.goalColumn != null) headPos.left = range.goalColumn;\n        goals.push(headPos.left);\n        var pos = findPosV(cm, headPos, dir, unit);\n        if (unit == \"page\" && range == doc.sel.primary())\n          addToScrollPos(cm, null, charCoords(cm, pos, \"div\").top - headPos.top);\n        return pos;\n      }, sel_move);\n      if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++)\n        doc.sel.ranges[i].goalColumn = goals[i];\n    }),\n\n    toggleOverwrite: function(value) {\n      if (value != null && value == this.state.overwrite) return;\n      if (this.state.overwrite = !this.state.overwrite)\n        addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n      else\n        rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n\n      signal(this, \"overwriteToggle\", this, this.state.overwrite);\n    },\n    hasFocus: function() { return activeElt() == this.display.input; },\n\n    scrollTo: methodOp(function(x, y) {\n      if (x != null || y != null) resolveScrollToPos(this);\n      if (x != null) this.curOp.scrollLeft = x;\n      if (y != null) this.curOp.scrollTop = y;\n    }),\n    getScrollInfo: function() {\n      var scroller = this.display.scroller, co = scrollerCutOff;\n      return {left: scroller.scrollLeft, top: scroller.scrollTop,\n              height: scroller.scrollHeight - co, width: scroller.scrollWidth - co,\n              clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co};\n    },\n\n    scrollIntoView: methodOp(function(range, margin) {\n      if (range == null) {\n        range = {from: this.doc.sel.primary().head, to: null};\n        if (margin == null) margin = this.options.cursorScrollMargin;\n      } else if (typeof range == \"number\") {\n        range = {from: Pos(range, 0), to: null};\n      } else if (range.from == null) {\n        range = {from: range, to: null};\n      }\n      if (!range.to) range.to = range.from;\n      range.margin = margin || 0;\n\n      if (range.from.line != null) {\n        resolveScrollToPos(this);\n        this.curOp.scrollToPos = range;\n      } else {\n        var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left),\n                                      Math.min(range.from.top, range.to.top) - range.margin,\n                                      Math.max(range.from.right, range.to.right),\n                                      Math.max(range.from.bottom, range.to.bottom) + range.margin);\n        this.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n      }\n    }),\n\n    setSize: methodOp(function(width, height) {\n      function interpret(val) {\n        return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n      }\n      if (width != null) this.display.wrapper.style.width = interpret(width);\n      if (height != null) this.display.wrapper.style.height = interpret(height);\n      if (this.options.lineWrapping) clearLineMeasurementCache(this);\n      this.curOp.forceUpdate = true;\n      signal(this, \"refresh\", this);\n    }),\n\n    operation: function(f){return runInOp(this, f);},\n\n    refresh: methodOp(function() {\n      var oldHeight = this.display.cachedTextHeight;\n      regChange(this);\n      this.curOp.forceUpdate = true;\n      clearCaches(this);\n      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop);\n      updateGutterSpace(this);\n      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n        estimateLineHeights(this);\n      signal(this, \"refresh\", this);\n    }),\n\n    swapDoc: methodOp(function(doc) {\n      var old = this.doc;\n      old.cm = null;\n      attachDoc(this, doc);\n      clearCaches(this);\n      resetInput(this);\n      this.scrollTo(doc.scrollLeft, doc.scrollTop);\n      signalLater(this, \"swapDoc\", this, old);\n      return old;\n    }),\n\n    getInputField: function(){return this.display.input;},\n    getWrapperElement: function(){return this.display.wrapper;},\n    getScrollerElement: function(){return this.display.scroller;},\n    getGutterElement: function(){return this.display.gutters;}\n  };\n  eventMixin(CodeMirror);\n\n  // OPTION DEFAULTS\n\n  // The default configuration options.\n  var defaults = CodeMirror.defaults = {};\n  // Functions to run when options are changed.\n  var optionHandlers = CodeMirror.optionHandlers = {};\n\n  function option(name, deflt, handle, notOnInit) {\n    CodeMirror.defaults[name] = deflt;\n    if (handle) optionHandlers[name] =\n      notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;\n  }\n\n  // Passed to option handlers when there is no old value.\n  var Init = CodeMirror.Init = {toString: function(){return \"CodeMirror.Init\";}};\n\n  // These two are, on init, called from the constructor because they\n  // have to be initialized before the editor can start at all.\n  option(\"value\", \"\", function(cm, val) {\n    cm.setValue(val);\n  }, true);\n  option(\"mode\", null, function(cm, val) {\n    cm.doc.modeOption = val;\n    loadMode(cm);\n  }, true);\n\n  option(\"indentUnit\", 2, loadMode, true);\n  option(\"indentWithTabs\", false);\n  option(\"smartIndent\", true);\n  option(\"tabSize\", 4, function(cm) {\n    resetModeState(cm);\n    clearCaches(cm);\n    regChange(cm);\n  }, true);\n  option(\"specialChars\", /[\\t\\u0000-\\u0019\\u00ad\\u200b\\u2028\\u2029\\ufeff]/g, function(cm, val) {\n    cm.options.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n    cm.refresh();\n  }, true);\n  option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true);\n  option(\"electricChars\", true);\n  option(\"rtlMoveVisually\", !windows);\n  option(\"wholeLineUpdateBefore\", true);\n\n  option(\"theme\", \"default\", function(cm) {\n    themeChanged(cm);\n    guttersChanged(cm);\n  }, true);\n  option(\"keyMap\", \"default\", keyMapChanged);\n  option(\"extraKeys\", null);\n\n  option(\"lineWrapping\", false, wrappingChanged, true);\n  option(\"gutters\", [], function(cm) {\n    setGuttersForLineNumbers(cm.options);\n    guttersChanged(cm);\n  }, true);\n  option(\"fixedGutter\", true, function(cm, val) {\n    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n    cm.refresh();\n  }, true);\n  option(\"coverGutterNextToScrollbar\", false, updateScrollbars, true);\n  option(\"lineNumbers\", false, function(cm) {\n    setGuttersForLineNumbers(cm.options);\n    guttersChanged(cm);\n  }, true);\n  option(\"firstLineNumber\", 1, guttersChanged, true);\n  option(\"lineNumberFormatter\", function(integer) {return integer;}, guttersChanged, true);\n  option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n  option(\"resetSelectionOnContextMenu\", true);\n\n  option(\"readOnly\", false, function(cm, val) {\n    if (val == \"nocursor\") {\n      onBlur(cm);\n      cm.display.input.blur();\n      cm.display.disabled = true;\n    } else {\n      cm.display.disabled = false;\n      if (!val) resetInput(cm);\n    }\n  });\n  option(\"disableInput\", false, function(cm, val) {if (!val) resetInput(cm);}, true);\n  option(\"dragDrop\", true);\n\n  option(\"cursorBlinkRate\", 530);\n  option(\"cursorScrollMargin\", 0);\n  option(\"cursorHeight\", 1);\n  option(\"workTime\", 100);\n  option(\"workDelay\", 100);\n  option(\"flattenSpans\", true, resetModeState, true);\n  option(\"addModeClass\", false, resetModeState, true);\n  option(\"pollInterval\", 100);\n  option(\"undoDepth\", 200, function(cm, val){cm.doc.history.undoDepth = val;});\n  option(\"historyEventDelay\", 1250);\n  option(\"viewportMargin\", 10, function(cm){cm.refresh();}, true);\n  option(\"maxHighlightLength\", 10000, resetModeState, true);\n  option(\"moveInputWithCursor\", true, function(cm, val) {\n    if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;\n  });\n\n  option(\"tabindex\", null, function(cm, val) {\n    cm.display.input.tabIndex = val || \"\";\n  });\n  option(\"autofocus\", null);\n\n  // MODE DEFINITION AND QUERYING\n\n  // Known modes, by name and by MIME\n  var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name, mode) {\n    if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n    if (arguments.length > 2) {\n      mode.dependencies = [];\n      for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]);\n    }\n    modes[name] = mode;\n  };\n\n  CodeMirror.defineMIME = function(mime, spec) {\n    mimeModes[mime] = spec;\n  };\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  CodeMirror.resolveMode = function(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") found = {name: found};\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return CodeMirror.resolveMode(\"application/xml\");\n    }\n    if (typeof spec == \"string\") return {name: spec};\n    else return spec || {name: \"null\"};\n  };\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  CodeMirror.getMode = function(options, spec) {\n    var spec = CodeMirror.resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) return CodeMirror.getMode(options, \"text/plain\");\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) continue;\n        if (modeObj.hasOwnProperty(prop)) modeObj[\"_\" + prop] = modeObj[prop];\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) modeObj.helperType = spec.helperType;\n    if (spec.modeProps) for (var prop in spec.modeProps)\n      modeObj[prop] = spec.modeProps[prop];\n\n    return modeObj;\n  };\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function() {\n    return {token: function(stream) {stream.skipToEnd();}};\n  });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = CodeMirror.modeExtensions = {};\n  CodeMirror.extendMode = function(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  };\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function(name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function(name, func) {\n    Doc.prototype[name] = func;\n  };\n  CodeMirror.defineOption = option;\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function(f) {initHooks.push(f);};\n\n  var helpers = CodeMirror.helpers = {};\n  CodeMirror.registerHelper = function(type, name, value) {\n    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []};\n    helpers[type][name] = value;\n  };\n  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n    CodeMirror.registerHelper(type, name, value);\n    helpers[type]._global.push({pred: predicate, val: value});\n  };\n\n  // MODE STATE HANDLING\n\n  // Utility functions for working with state. Exported because nested\n  // modes need to do this for their inner modes.\n\n  var copyState = CodeMirror.copyState = function(mode, state) {\n    if (state === true) return state;\n    if (mode.copyState) return mode.copyState(state);\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) val = val.concat([]);\n      nstate[n] = val;\n    }\n    return nstate;\n  };\n\n  var startState = CodeMirror.startState = function(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true;\n  };\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  CodeMirror.innerMode = function(mode, state) {\n    while (mode.innerMode) {\n      var info = mode.innerMode(state);\n      if (!info || info.mode == mode) break;\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state};\n  };\n\n  // STANDARD COMMANDS\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = CodeMirror.commands = {\n    selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);},\n    singleSelection: function(cm) {\n      cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n    },\n    killLine: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        if (range.empty()) {\n          var len = getLine(cm.doc, range.head.line).text.length;\n          if (range.head.ch == len && range.head.line < cm.lastLine())\n            return {from: range.head, to: Pos(range.head.line + 1, 0)};\n          else\n            return {from: range.head, to: Pos(range.head.line, len)};\n        } else {\n          return {from: range.from(), to: range.to()};\n        }\n      });\n    },\n    deleteLine: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        return {from: Pos(range.from().line, 0),\n                to: clipPos(cm.doc, Pos(range.to().line + 1, 0))};\n      });\n    },\n    delLineLeft: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        return {from: Pos(range.from().line, 0), to: range.from()};\n      });\n    },\n    undo: function(cm) {cm.undo();},\n    redo: function(cm) {cm.redo();},\n    undoSelection: function(cm) {cm.undoSelection();},\n    redoSelection: function(cm) {cm.redoSelection();},\n    goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},\n    goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},\n    goLineStart: function(cm) {\n      cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, sel_move);\n    },\n    goLineStartSmart: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var start = lineStart(cm, range.head.line);\n        var line = cm.getLineHandle(start.line);\n        var order = getOrder(line);\n        if (!order || order[0].level == 0) {\n          var firstNonWS = Math.max(0, line.text.search(/\\S/));\n          var inWS = range.head.line == start.line && range.head.ch <= firstNonWS && range.head.ch;\n          return Pos(start.line, inWS ? 0 : firstNonWS);\n        }\n        return start;\n      }, sel_move);\n    },\n    goLineEnd: function(cm) {\n      cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, sel_move);\n    },\n    goLineRight: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      }, sel_move);\n    },\n    goLineLeft: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        return cm.coordsChar({left: 0, top: top}, \"div\");\n      }, sel_move);\n    },\n    goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n    goLineDown: function(cm) {cm.moveV(1, \"line\");},\n    goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n    goPageDown: function(cm) {cm.moveV(1, \"page\");},\n    goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n    goCharRight: function(cm) {cm.moveH(1, \"char\");},\n    goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n    goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n    goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n    goGroupRight: function(cm) {cm.moveH(1, \"group\");},\n    goGroupLeft: function(cm) {cm.moveH(-1, \"group\");},\n    goWordRight: function(cm) {cm.moveH(1, \"word\");},\n    delCharBefore: function(cm) {cm.deleteH(-1, \"char\");},\n    delCharAfter: function(cm) {cm.deleteH(1, \"char\");},\n    delWordBefore: function(cm) {cm.deleteH(-1, \"word\");},\n    delWordAfter: function(cm) {cm.deleteH(1, \"word\");},\n    delGroupBefore: function(cm) {cm.deleteH(-1, \"group\");},\n    delGroupAfter: function(cm) {cm.deleteH(1, \"group\");},\n    indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n    indentMore: function(cm) {cm.indentSelection(\"add\");},\n    indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n    insertTab: function(cm) {cm.replaceSelection(\"\\t\");},\n    insertSoftTab: function(cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(new Array(tabSize - col % tabSize + 1).join(\" \"));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function(cm) {\n      if (cm.somethingSelected()) cm.indentSelection(\"add\");\n      else cm.execCommand(\"insertTab\");\n    },\n    transposeChars: function(cm) {\n      runInOp(cm, function() {\n        var ranges = cm.listSelections(), newSel = [];\n        for (var i = 0; i < ranges.length; i++) {\n          var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n          if (line) {\n            if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1);\n            if (cur.ch > 0) {\n              cur = new Pos(cur.line, cur.ch + 1);\n              cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                              Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n            } else if (cur.line > cm.doc.first) {\n              var prev = getLine(cm.doc, cur.line - 1).text;\n              if (prev)\n                cm.replaceRange(line.charAt(0) + \"\\n\" + prev.charAt(prev.length - 1),\n                                Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), \"+transpose\");\n            }\n          }\n          newSel.push(new Range(cur, cur));\n        }\n        cm.setSelections(newSel);\n      });\n    },\n    newlineAndIndent: function(cm) {\n      runInOp(cm, function() {\n        var len = cm.listSelections().length;\n        for (var i = 0; i < len; i++) {\n          var range = cm.listSelections()[i];\n          cm.replaceRange(\"\\n\", range.anchor, range.head, \"+input\");\n          cm.indentLine(range.from().line + 1, null, true);\n          ensureCursorVisible(cm);\n        }\n      });\n    },\n    toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n  };\n\n  // STANDARD KEYMAPS\n\n  var keyMap = CodeMirror.keyMap = {};\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Down\": \"goDocEnd\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    fallthrough: \"basic\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineStart\", \"Cmd-Right\": \"goLineEnd\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delLineLeft\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\",\n    fallthrough: [\"basic\", \"emacsy\"]\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function getKeyMap(val) {\n    if (typeof val == \"string\") return keyMap[val];\n    else return val;\n  }\n\n  // Given an array of keymaps and a key name, call handle on any\n  // bindings found, until that returns a truthy value, at which point\n  // we consider the key handled. Implements things like binding a key\n  // to false stopping further handling and keymap fallthrough.\n  var lookupKey = CodeMirror.lookupKey = function(name, maps, handle) {\n    function lookup(map) {\n      map = getKeyMap(map);\n      var found = map[name];\n      if (found === false) return \"stop\";\n      if (found != null && handle(found)) return true;\n      if (map.nofallthrough) return \"stop\";\n\n      var fallthrough = map.fallthrough;\n      if (fallthrough == null) return false;\n      if (Object.prototype.toString.call(fallthrough) != \"[object Array]\")\n        return lookup(fallthrough);\n      for (var i = 0; i < fallthrough.length; ++i) {\n        var done = lookup(fallthrough[i]);\n        if (done) return done;\n      }\n      return false;\n    }\n\n    for (var i = 0; i < maps.length; ++i) {\n      var done = lookup(maps[i]);\n      if (done) return done != \"stop\";\n    }\n  };\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  var isModifierKey = CodeMirror.isModifierKey = function(event) {\n    var name = keyNames[event.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n  };\n\n  // Look up the name of a key as indicated by an event object.\n  var keyName = CodeMirror.keyName = function(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) return false;\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) return false;\n    if (event.altKey) name = \"Alt-\" + name;\n    if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = \"Ctrl-\" + name;\n    if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = \"Cmd-\" + name;\n    if (!noShift && event.shiftKey) name = \"Shift-\" + name;\n    return name;\n  };\n\n  // FROMTEXTAREA\n\n  CodeMirror.fromTextArea = function(textarea, options) {\n    if (!options) options = {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabindex)\n      options.tabindex = textarea.tabindex;\n    if (!options.placeholder && textarea.placeholder)\n      options.placeholder = textarea.placeholder;\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form, realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function() {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function(node) {\n      textarea.parentNode.insertBefore(node, textarea.nextSibling);\n    }, options);\n    cm.save = save;\n    cm.getTextArea = function() { return textarea; };\n    cm.toTextArea = function() {\n      save();\n      textarea.parentNode.removeChild(cm.getWrapperElement());\n      textarea.style.display = \"\";\n      if (textarea.form) {\n        off(textarea.form, \"submit\", save);\n        if (typeof textarea.form.submit == \"function\")\n          textarea.form.submit = realSubmit;\n      }\n    };\n    return cm;\n  };\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = CodeMirror.StringStream = function(string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n  };\n\n  StringStream.prototype = {\n    eol: function() {return this.pos >= this.string.length;},\n    sol: function() {return this.pos == this.lineStart;},\n    peek: function() {return this.string.charAt(this.pos) || undefined;},\n    next: function() {\n      if (this.pos < this.string.length)\n        return this.string.charAt(this.pos++);\n    },\n    eat: function(match) {\n      var ch = this.string.charAt(this.pos);\n      if (typeof match == \"string\") var ok = ch == match;\n      else var ok = ch && (match.test ? match.test(ch) : match(ch));\n      if (ok) {++this.pos; return ch;}\n    },\n    eatWhile: function(match) {\n      var start = this.pos;\n      while (this.eat(match)){}\n      return this.pos > start;\n    },\n    eatSpace: function() {\n      var start = this.pos;\n      while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n      return this.pos > start;\n    },\n    skipToEnd: function() {this.pos = this.string.length;},\n    skipTo: function(ch) {\n      var found = this.string.indexOf(ch, this.pos);\n      if (found > -1) {this.pos = found; return true;}\n    },\n    backUp: function(n) {this.pos -= n;},\n    column: function() {\n      if (this.lastColumnPos < this.start) {\n        this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n        this.lastColumnPos = this.start;\n      }\n      return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n    },\n    indentation: function() {\n      return countColumn(this.string, null, this.tabSize) -\n        (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n    },\n    match: function(pattern, consume, caseInsensitive) {\n      if (typeof pattern == \"string\") {\n        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n        var substr = this.string.substr(this.pos, pattern.length);\n        if (cased(substr) == cased(pattern)) {\n          if (consume !== false) this.pos += pattern.length;\n          return true;\n        }\n      } else {\n        var match = this.string.slice(this.pos).match(pattern);\n        if (match && match.index > 0) return null;\n        if (match && consume !== false) this.pos += match[0].length;\n        return match;\n      }\n    },\n    current: function(){return this.string.slice(this.start, this.pos);},\n    hideFirstChars: function(n, inner) {\n      this.lineStart += n;\n      try { return inner(); }\n      finally { this.lineStart -= n; }\n    }\n  };\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  var TextMarker = CodeMirror.TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n  };\n  eventMixin(TextMarker);\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function() {\n    if (this.explicitlyCleared) return;\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) startOperation(cm);\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) signalLater(this, \"clear\", found.from, found.to);\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) regLineChange(cm, lineNo(line), \"text\");\n      else if (cm) {\n        if (span.to != null) max = lineNo(line);\n        if (span.from != null) min = lineNo(line);\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        updateLineHeight(line, textHeight(cm.display));\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {\n      var visual = visualLine(this.lines[i]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    }\n\n    if (min != null && cm && this.collapsed) regChange(cm, min, max + 1);\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) reCheckSelection(cm.doc);\n    }\n    if (cm) signalLater(cm, \"markerCleared\", cm, this);\n    if (withOp) endOperation(cm);\n    if (this.parent) this.parent.clear();\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function(side, lineObj) {\n    if (side == null && this.type == \"bookmark\") side = 1;\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) return from;\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) return to;\n      }\n    }\n    return from && {from: from, to: to};\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function() {\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) return;\n    runInOp(cm, function() {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          updateLineHeight(line, line.height + dHeight);\n      }\n    });\n  };\n\n  TextMarker.prototype.attachLine = function(line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n    }\n    this.lines.push(line);\n  };\n  TextMarker.prototype.detachLine = function(line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) return markTextShared(doc, from, to, options, type);\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) copyObj(options, marker, false);\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      return marker;\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = elt(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) marker.widgetNode.ignoreEvents = true;\n      if (options.insertLeft) marker.widgetNode.insertLeft = true;\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n      sawCollapsedSpans = true;\n    }\n\n    if (marker.addToHistory)\n      addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN);\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function(line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        updateMaxLine = true;\n      if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {\n      if (lineIsHidden(doc, line)) updateLineHeight(line, 0);\n    });\n\n    if (marker.clearOnEnter) on(marker, \"beforeCursorEnter\", function() { marker.clear(); });\n\n    if (marker.readOnly) {\n      sawReadOnlySpans = true;\n      if (doc.history.done.length || doc.history.undone.length)\n        doc.clearHistory();\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) cm.curOp.updateMaxLine = true;\n      if (marker.collapsed)\n        regChange(cm, from.line, to.line + 1);\n      else if (marker.className || marker.title || marker.startStyle || marker.endStyle)\n        for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, \"text\");\n      if (marker.atomic) reCheckSelection(cm.doc);\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker;\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      markers[i].parent = this;\n  };\n  eventMixin(SharedTextMarker);\n\n  SharedTextMarker.prototype.clear = function() {\n    if (this.explicitlyCleared) return;\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      this.markers[i].clear();\n    signalLater(this, \"clear\");\n  };\n  SharedTextMarker.prototype.find = function(side, lineObj) {\n    return this.primary.find(side, lineObj);\n  };\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function(doc) {\n      if (widget) options.widgetNode = widget.cloneNode(true);\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        if (doc.linked[i].isParent) return;\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary);\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())),\n                         function(m) { return m.parent; });\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], linked = [marker.primary.doc];;\n      linkedDocs(marker.primary.doc, function(d) { linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    }\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) return span;\n    }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    for (var r, i = 0; i < spans.length; ++i)\n      if (spans[i] != span) (r || (r = [])).push(spans[i]);\n    return r;\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    if (old) for (var i = 0, nw; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n        (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    }\n    return nw;\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    if (old) for (var i = 0, nw; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n        (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    }\n    return nw;\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) return null;\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) span.to = startCh;\n          else if (sameLine) span.to = found.to == null ? null : found.to + offset;\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i = 0; i < last.length; ++i) {\n        var span = last[i];\n        if (span.to != null) span.to += offset;\n        if (span.from == null) {\n          var found = getMarkedSpanFor(first, span.marker);\n          if (!found) {\n            span.from = offset;\n            if (sameLine) (first || (first = [])).push(span);\n          }\n        } else {\n          span.from += offset;\n          if (sameLine) (first || (first = [])).push(span);\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) first = clearEmptySpans(first);\n    if (last && last != first) last = clearEmptySpans(last);\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        for (var i = 0; i < first.length; ++i)\n          if (first[i].to == null)\n            (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null));\n      for (var i = 0; i < gap; ++i)\n        newMarkers.push(gapMarkers);\n      newMarkers.push(last);\n    }\n    return newMarkers;\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        spans.splice(i--, 1);\n    }\n    if (!spans.length) return null;\n    return spans;\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) return stretched;\n    if (!stretched) return old;\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            if (oldCur[k].marker == span.marker) continue spans;\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old;\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function(line) {\n      if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          (markers || (markers = [])).push(mark);\n      }\n    });\n    if (!markers) return null;\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue;\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          newParts.push({from: p.from, to: m.from});\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          newParts.push({from: m.to, to: p.to});\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 1;\n      }\n    }\n    return parts;\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) return;\n    for (var i = 0; i < spans.length; ++i)\n      spans[i].marker.detachLine(line);\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) return;\n    for (var i = 0; i < spans.length; ++i)\n      spans[i].marker.attachLine(line);\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) return lenDiff;\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) return -fromCmp;\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) return toCmp;\n    return b.id - a.id;\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        found = sp.marker;\n    }\n    return found;\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) continue;\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;\n      if (fromCmp <= 0 && (cmp(found.to, from) || extraRight(sp.marker) - extraLeft(marker)) > 0 ||\n          fromCmp >= 0 && (cmp(found.from, to) || extraLeft(sp.marker) - extraRight(marker)) < 0)\n        return true;\n    }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      line = merged.find(-1, true).line;\n    return line;\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line;\n      (lines || (lines = [])).push(line);\n    }\n    return lines;\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) return lineN;\n    return lineNo(vis);\n  }\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) return lineN;\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) return lineN;\n    while (merged = collapsedSpanAtEnd(line))\n      line = merged.find(1, true).line;\n    return lineNo(line) + 1;\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) continue;\n      if (sp.from == null) return true;\n      if (sp.marker.widgetNode) continue;\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        return true;\n    }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      return true;\n    for (var sp, i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) return true;\n    }\n  }\n\n  // LINE WIDGETS\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = CodeMirror.LineWidget = function(cm, node, options) {\n    if (options) for (var opt in options) if (options.hasOwnProperty(opt))\n      this[opt] = options[opt];\n    this.cm = cm;\n    this.node = node;\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      addToScrollPos(cm, null, diff);\n  }\n\n  LineWidget.prototype.clear = function() {\n    var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) return;\n    for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);\n    if (!ws.length) line.widgets = null;\n    var height = widgetHeight(this);\n    runInOp(cm, function() {\n      adjustScrollWhenAboveVisible(cm, line, -height);\n      regLineChange(cm, no, \"widget\");\n      updateLineHeight(line, Math.max(0, line.height - height));\n    });\n  };\n  LineWidget.prototype.changed = function() {\n    var oldH = this.height, cm = this.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) return;\n    runInOp(cm, function() {\n      cm.curOp.forceUpdate = true;\n      adjustScrollWhenAboveVisible(cm, line, diff);\n      updateLineHeight(line, line.height + diff);\n    });\n  };\n\n  function widgetHeight(widget) {\n    if (widget.height != null) return widget.height;\n    if (!contains(document.body, widget.node))\n      removeChildrenAndAdd(widget.cm.display.measure, elt(\"div\", [widget.node], null, \"position: relative\"));\n    return widget.height = widget.node.offsetHeight;\n  }\n\n  function addLineWidget(cm, handle, node, options) {\n    var widget = new LineWidget(cm, node, options);\n    if (widget.noHScroll) cm.display.alignWidgets = true;\n    changeLine(cm, handle, \"widget\", function(line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) widgets.push(widget);\n      else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n      widget.line = line;\n      if (!lineIsHidden(cm.doc, line)) {\n        var aboveVisible = heightAtLine(line) < cm.doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) addToScrollPos(cm, null, widget.height);\n        cm.curOp.forceUpdate = true;\n      }\n      return true;\n    });\n    return widget;\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n  eventMixin(Line);\n  Line.prototype.lineNo = function() { return lineNo(this); };\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) line.stateAfter = null;\n    if (line.styles) line.styles = null;\n    if (line.order != null) line.order = null;\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) updateLineHeight(line, estHeight);\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) break;\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        output[prop] = lineClass[2];\n      else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n        output[prop] += \" \" + lineClass[2];\n    }\n    return type;\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) return mode.blankLine(state);\n    if (!mode.innerMode) return;\n    var inner = CodeMirror.innerMode(mode, state);\n    if (inner.mode.blankLine) return inner.mode.blankLine(inner.state);\n  }\n\n  function readToken(mode, stream, state) {\n    for (var i = 0; i < 10; i++) {\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) return style;\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize), style;\n    if (text == \"\") extractLineClasses(callBlankLine(mode, state), lineClasses);\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) processLine(cm, text, state, stream.pos);\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, state), lineClasses);\n      }\n      if (cm.options.addModeClass) {\n        var mName = CodeMirror.innerMode(mode, state).mode.name;\n        if (mName) style = \"m-\" + (style ? mName + \" \" + style : mName);\n      }\n      if (!flattenSpans || curStyle != style) {\n        if (curStart < stream.start) f(stream.start, curStyle);\n        curStart = stream.start; curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444 characters\n      var pos = Math.min(stream.pos, curStart + 50000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, state, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, state, function(end, style) {\n      st.push(end, style);\n    }, lineClasses, forceToEnd);\n\n    // Run overlays, adjust style array.\n    for (var o = 0; o < cm.state.overlays.length; ++o) {\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      runMode(cm, line.text, overlay.mode, true, function(end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            st.splice(i, 1, end, st[i+1], i_end);\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) return;\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"cm-overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"cm-overlay \" + style;\n          }\n        }\n      }, lineClasses);\n    }\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null};\n  }\n\n  function getLineStyles(cm, line) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));\n      line.styles = result.styles;\n      if (result.classes) line.styleClasses = result.classes;\n      else if (line.styleClasses) line.styleClasses = null;\n    }\n    return line.styles;\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, state, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") callBlankLine(mode, state);\n    while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {\n      readToken(mode, stream, state);\n      stream.start = stream.pos;\n    }\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) return null;\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = elt(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: elt(\"pre\", [content]), content: content, col: 0, pos: 0, cm: cm};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order;\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if ((ie || webkit) && cm.getOption(\"lineWrapping\"))\n        builder.addToken = buildTokenSplitSpaces(builder.addToken);\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line)))\n        builder.addToken = buildTokenBadBidi(builder.addToken, order);\n      builder.map = [];\n      insertLineContent(line, builder, getLineStyles(cm, line));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n        if (line.styleClasses.textClass)\n          builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n        (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n        (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    return builder;\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    return token;\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, title) {\n    if (!text) return;\n    var special = builder.cm.options.specialChars, mustWrap = false;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      var content = document.createTextNode(text);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie_upto8) mustWrap = true;\n      builder.pos += text.length;\n    } else {\n      var content = document.createDocumentFragment(), pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(text.slice(pos, pos + skipped));\n          if (ie_upto8) content.appendChild(elt(\"span\", [txt]));\n          else content.appendChild(txt);\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) break;\n        pos += skipped + 1;\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          var txt = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          builder.col += tabWidth;\n        } else {\n          var txt = builder.cm.options.specialCharPlaceholder(m[0]);\n          if (ie_upto8) content.appendChild(elt(\"span\", [txt]));\n          else content.appendChild(txt);\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt);\n        builder.pos++;\n      }\n    }\n    if (style || startStyle || endStyle || mustWrap) {\n      var fullStyle = style || \"\";\n      if (startStyle) fullStyle += startStyle;\n      if (endStyle) fullStyle += endStyle;\n      var token = elt(\"span\", [content], fullStyle);\n      if (title) token.title = title;\n      return builder.content.appendChild(token);\n    }\n    builder.content.appendChild(content);\n  }\n\n  function buildTokenSplitSpaces(inner) {\n    function split(old) {\n      var out = \" \";\n      for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? \" \" : \"\\u00a0\";\n      out += \" \";\n      return out;\n    }\n    return function(builder, text, style, startStyle, endStyle, title) {\n      inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title);\n    };\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function(builder, text, style, startStyle, endStyle, title) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        for (var i = 0; i < order.length; i++) {\n          var part = order[i];\n          if (part.to > start && part.from <= start) break;\n        }\n        if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title);\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, title);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    };\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) {\n      builder.map.push(builder.pos, builder.pos + size, widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i = 1; i < styles.length; i+=2)\n        builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options));\n      return;\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = title = \"\";\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [];\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (sp.from <= pos && (sp.to == null || sp.to > pos)) {\n            if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = \"\"; }\n            if (m.className) spanStyle += \" \" + m.className;\n            if (m.startStyle && sp.from == pos) spanStartStyle += \" \" + m.startStyle;\n            if (m.endStyle && sp.to == nextChange) spanEndStyle += \" \" + m.endStyle;\n            if (m.title && !title) title = m.title;\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              collapsed = sp;\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) foundBookmarks.push(m);\n        }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) return;\n        }\n        if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j)\n          buildCollapsedSpan(builder, 0, foundBookmarks[j]);\n      }\n      if (pos >= len) break;\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null;}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      for (var i = 0, added = []; i < text.length - 1; ++i)\n        added.push(new Line(text[i], spansFor(i), estimateHeight));\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) doc.remove(from.line, nlines);\n      if (added.length) doc.insert(from.line, added);\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        for (var added = [], i = 1; i < text.length - 1; ++i)\n          added.push(new Line(text[i], spansFor(i), estimateHeight));\n        added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      for (var i = 1, added = []; i < text.length - 1; ++i)\n        added.push(new Line(text[i], spansFor(i), estimateHeight));\n      if (nlines > 1) doc.remove(from.line + 1, nlines - 1);\n      doc.insert(from.line + 1, added);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    for (var i = 0, height = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length; },\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) lines[i].parent = this;\n    },\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        if (op(this.lines[at])) return true;\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size; },\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) break;\n          at = 0;\n        } else at -= sz;\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines);\n    },\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            while (child.lines.length > 50) {\n              var spilled = child.lines.splice(child.lines.length - 25, 25);\n              var newleaf = new LeafChunk(spilled);\n              child.height -= newleaf.height;\n              this.children.splice(i + 1, 0, newleaf);\n              newleaf.parent = this;\n            }\n            this.maybeSpill();\n          }\n          break;\n        }\n        at -= sz;\n      }\n    },\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) return;\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n        } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10);\n      me.parent.maybeSpill();\n    },\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) return true;\n          if ((n -= used) == 0) break;\n          at = 0;\n        } else at -= sz;\n      }\n    }\n  };\n\n  var nextDocId = 0;\n  var Doc = CodeMirror.Doc = function(text, mode, firstLine) {\n    if (!(this instanceof Doc)) return new Doc(text, mode, firstLine);\n    if (firstLine == null) firstLine = 0;\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.frontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n\n    if (typeof text == \"string\") text = splitLines(text);\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) this.iterN(from - this.first, to - from, op);\n      else this.iterN(this.first, this.first + this.size, from);\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) height += lines[i].height;\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) return lines;\n      return lines.join(lineSep || \"\\n\");\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: splitLines(code), origin: \"setValue\"}, true);\n      setSelection(this, simpleSelection(top));\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) return lines;\n      return lines.join(lineSep || \"\\n\");\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},\n\n    getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},\n    getLineNumber: function(line) {return lineNo(line);},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") line = getLine(this, line);\n      return visualLine(line);\n    },\n\n    lineCount: function() {return this.size;},\n    firstLine: function() {return this.first;},\n    lastLine: function() {return this.first + this.size - 1;},\n\n    clipPos: function(pos) {return clipPos(this, pos);},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") pos = range.head;\n      else if (start == \"anchor\") pos = range.anchor;\n      else if (start == \"end\" || start == \"to\" || start === false) pos = range.to();\n      else pos = range.from();\n      return pos;\n    },\n    listSelections: function() { return this.sel.ranges; },\n    somethingSelected: function() {return this.sel.somethingSelected();},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads, options));\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      extendSelections(this, map(this.sel.ranges, f), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) return;\n      for (var i = 0, out = []; i < ranges.length; i++)\n        out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head));\n      if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex);\n      setSelection(this, normalizeSelection(out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) return lines;\n      else return lines.join(lineSep || \"\\n\");\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) sel = sel.join(lineSep || \"\\n\");\n        parts[i] = sel;\n      }\n      return parts;\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        dup[i] = code;\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i = changes.length - 1; i >= 0; i--)\n        makeChange(this, changes[i]);\n      if (newSel) setSelectionReplaceHistory(this, newSel);\n      else if (this.cm) ensureCursorVisible(this.cm);\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend;},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done;\n      for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone;\n      return {undo: done, redo: undone};\n    },\n    clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        this.history.lastOp = this.history.lastOrigin = null;\n      return this.history.generation;\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration);\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)};\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, \"range\");\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\");\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          markers.push(span.marker.parent || span.marker);\n      }\n      return markers;\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function(line) {\n        var spans = line.markedSpans;\n        if (spans) for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(lineNo == from.line && from.ch > span.to ||\n                span.from == null && lineNo != from.line||\n                lineNo == to.line && span.from > to.ch) &&\n              (!filter || filter(span.marker)))\n            found.push(span.marker.parent || span.marker);\n        }\n        ++lineNo;\n      });\n      return found;\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function(line) {\n        var sps = line.markedSpans;\n        if (sps) for (var i = 0; i < sps.length; ++i)\n          if (sps[i].from != null) markers.push(sps[i].marker);\n      });\n      return markers;\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first;\n      this.iter(function(line) {\n        var sz = line.text.length + 1;\n        if (sz > off) { ch = off; return true; }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch));\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) return 0;\n      this.iter(this.first, coords.line, function (line) {\n        index += line.text.length + 1;\n      });\n      return index;\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc;\n    },\n\n    linkedDoc: function(options) {\n      if (!options) options = {};\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) from = options.from;\n      if (options.to != null && options.to < to) to = options.to;\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from);\n      if (options.sharedHist) copy.history = this.history;\n      (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy;\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) other = other.doc;\n      if (this.linked) for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) continue;\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break;\n      }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode;},\n    getEditor: function() {return this.cm;}\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor\".split(\" \");\n  for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments);};\n    })(Doc.prototype[prop]);\n\n  eventMixin(Doc);\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) continue;\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) continue;\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) throw new Error(\"This document is already in use.\");\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    if (!cm.options.lineWrapping) findMaxLine(cm);\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  // LINE UTILITIES\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n    for (var chunk = doc; !chunk.lines;) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break; }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n];\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function(line) {\n      var text = line.text;\n      if (n == end.line) text = text.slice(0, end.ch);\n      if (n == start.line) text = text.slice(start.ch);\n      out.push(text);\n      ++n;\n    });\n    return out;\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function(line) { out.push(line.text); });\n    return out;\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) for (var n = line; n; n = n.parent) n.height += diff;\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) return null;\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) break;\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first;\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i = 0; i < chunk.children.length; ++i) {\n        var child = chunk.children[i], ch = child.height;\n        if (h < ch) { chunk = child; continue outer; }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n;\n    } while (!chunk.lines);\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) break;\n      h -= lh;\n    }\n    return n + i;\n  }\n\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) break;\n      else h += line.height;\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i = 0; i < p.children.length; ++i) {\n        var cur = p.children[i];\n        if (cur == chunk) break;\n        else h += cur.height;\n      }\n    }\n    return h;\n  }\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line) {\n    var order = line.order;\n    if (order == null) order = line.order = bidiOrdering(line.text);\n    return order;\n  }\n\n  // HISTORY\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);\n    return histChange;\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) array.pop();\n      else break;\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done);\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done);\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done);\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, ore are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      var last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        pushSelectionToHistory(doc.sel, hist.done);\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) hist.done.shift();\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) signal(doc, \"historyAdded\");\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      hist.done[hist.done.length - 1] = sel;\n    else\n      pushSelectionToHistory(sel, hist.done);\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastOp = opId;\n    if (options && options.clearRedo !== false)\n      clearSelectionEvents(hist.undone);\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      dest.push(sel);\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {\n      if (line.markedSpans)\n        (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) return null;\n    for (var i = 0, out; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }\n      else if (out) out.push(spans[i]);\n    }\n    return !out ? spans : out.length ? out : null;\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) return null;\n    for (var i = 0, nw = []; i < change.text.length; ++i)\n      nw.push(removeClearedSpans(found[i]));\n    return nw;\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    for (var i = 0, copy = []; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue;\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m;\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        }\n      }\n    }\n    return copy;\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue;\n      }\n      for (var j = 0; j < sub.changes.length; ++j) {\n        var cur = sub.changes[j];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break;\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // EVENT UTILITIES\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  var e_preventDefault = CodeMirror.e_preventDefault = function(e) {\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n  };\n  var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) {\n    if (e.stopPropagation) e.stopPropagation();\n    else e.cancelBubble = true;\n  };\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n  }\n  var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);};\n\n  function e_target(e) {return e.target || e.srcElement;}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) b = 1;\n      else if (e.button & 2) b = 3;\n      else if (e.button & 4) b = 2;\n    }\n    if (mac && e.ctrlKey && b == 1) b = 3;\n    return b;\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var on = CodeMirror.on = function(emitter, type, f) {\n    if (emitter.addEventListener)\n      emitter.addEventListener(type, f, false);\n    else if (emitter.attachEvent)\n      emitter.attachEvent(\"on\" + type, f);\n    else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      var arr = map[type] || (map[type] = []);\n      arr.push(f);\n    }\n  };\n\n  var off = CodeMirror.off = function(emitter, type, f) {\n    if (emitter.removeEventListener)\n      emitter.removeEventListener(type, f, false);\n    else if (emitter.detachEvent)\n      emitter.detachEvent(\"on\" + type, f);\n    else {\n      var arr = emitter._handlers && emitter._handlers[type];\n      if (!arr) return;\n      for (var i = 0; i < arr.length; ++i)\n        if (arr[i] == f) { arr.splice(i, 1); break; }\n    }\n  };\n\n  var signal = CodeMirror.signal = function(emitter, type /*, values...*/) {\n    var arr = emitter._handlers && emitter._handlers[type];\n    if (!arr) return;\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args);\n  };\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  var delayedCallbacks, delayedCallbackDepth = 0;\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = emitter._handlers && emitter._handlers[type];\n    if (!arr) return;\n    var args = Array.prototype.slice.call(arguments, 2);\n    if (!delayedCallbacks) {\n      ++delayedCallbackDepth;\n      delayedCallbacks = [];\n      setTimeout(fireDelayed, 0);\n    }\n    function bnd(f) {return function(){f.apply(null, args);};};\n    for (var i = 0; i < arr.length; ++i)\n      delayedCallbacks.push(bnd(arr[i]));\n  }\n\n  function fireDelayed() {\n    --delayedCallbackDepth;\n    var delayed = delayedCallbacks;\n    delayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) delayed[i]();\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore;\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) return;\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1)\n      set.push(arr[i]);\n  }\n\n  function hasHandler(emitter, type) {\n    var arr = emitter._handlers && emitter._handlers[type];\n    return arr && arr.length > 0;\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // MISC UTILITIES\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerCutOff = 30;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = CodeMirror.Pass = {toString: function(){return \"CodeMirror.Pass\";}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  function Delayed() {this.id = null;}\n  Delayed.prototype.set = function(ms, f) {\n    clearTimeout(this.id);\n    this.id = setTimeout(f, ms);\n  };\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) end = string.length;\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        return n + (end - i);\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  };\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) nextTab = string.length;\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        return pos + Math.min(skipped, goal - col);\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) return pos;\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      spaceStrs.push(lst(spaceStrs) + \" \");\n    return spaceStrs[n];\n  }\n\n  function lst(arr) { return arr[arr.length-1]; }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; };\n  else if (ie) // Suppress mysterious IE10 errors\n    selectInput = function(node) { try { node.select(); } catch(_e) {} };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      if (array[i] == elt) return i;\n    return -1;\n  }\n  if ([].indexOf) indexOf = function(array, elt) { return array.indexOf(elt); };\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) out[i] = f(array[i], i);\n    return out;\n  }\n  if ([].map) map = function(array, f) { return array.map(f); };\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      var ctor = function() {};\n      ctor.prototype = base;\n      inst = new ctor();\n    }\n    if (props) copyObj(props, inst);\n    return inst;\n  };\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) target = {};\n    for (var prop in obj)\n      if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        target[prop] = obj[prop];\n    return target;\n  }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args);};\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  var isWordCharBasic = CodeMirror.isWordChar = function(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n  };\n  function isWordChar(ch, helper) {\n    if (!helper) return isWordCharBasic(ch);\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) return true;\n    return helper.test(ch);\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;\n    return true;\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); }\n\n  // DOM UTILITIES\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) e.className = className;\n    if (style) e.style.cssText = style;\n    if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n    return e;\n  }\n\n  var range;\n  if (document.createRange) range = function(node, start, end) {\n    var r = document.createRange();\n    r.setEnd(node, end);\n    r.setStart(node, start);\n    return r;\n  };\n  else range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    r.moveToElementText(node.parentNode);\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r;\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      e.removeChild(e.firstChild);\n    return e;\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e);\n  }\n\n  function contains(parent, child) {\n    if (parent.contains)\n      return parent.contains(child);\n    while (child = child.parentNode)\n      if (child == parent) return true;\n  }\n\n  function activeElt() { return document.activeElement; }\n  // Older versions of IE throws unspecified error when touching\n  // document.activeElement in some cases (during loading, in iframe)\n  if (ie_upto10) activeElt = function() {\n    try { return document.activeElement; }\n    catch(e) { return document.body; }\n  };\n\n  function classTest(cls) { return new RegExp(\"\\\\b\" + cls + \"\\\\b\\\\s*\"); }\n  function rmClass(node, cls) {\n    var test = classTest(cls);\n    if (test.test(node.className)) node.className = node.className.replace(test, \"\");\n  }\n  function addClass(node, cls) {\n    if (!classTest(cls).test(node.className)) node.className += \" \" + cls;\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      if (as[i] && !classTest(as[i]).test(b)) b += \" \" + as[i];\n    return b;\n  }\n\n  // WINDOW-WIDE EVENTS\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.body.getElementsByClassName) return;\n    var byClass = document.body.getElementsByClassName(\"CodeMirror\");\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) f(cm);\n    }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) return;\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function() {\n      if (resizeTimer == null) resizeTimer = setTimeout(function() {\n        resizeTimer = null;\n        knownScrollbarWidth = null;\n        forEachCodeMirror(onResize);\n      }, 100);\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function() {\n      forEachCodeMirror(onBlur);\n    });\n  }\n\n  // FEATURE DETECTION\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie_upto8) return false;\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div;\n  }();\n\n  var knownScrollbarWidth;\n  function scrollbarWidth(measure) {\n    if (knownScrollbarWidth != null) return knownScrollbarWidth;\n    var test = elt(\"div\", null, null, \"width: 50px; height: 50px; overflow-x: scroll\");\n    removeChildrenAndAdd(measure, test);\n    if (test.offsetWidth)\n      knownScrollbarWidth = test.offsetHeight - test.clientHeight;\n    return knownScrollbarWidth || 0;\n  }\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_upto7;\n    }\n    if (zwspSupported) return elt(\"span\", \"\\u200b\");\n    else return elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) return badBidiRects;\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    if (r0.left == r0.right) return false;\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    return badBidiRects = (r1.right - r0.right < 3);\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLines = CodeMirror.splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) nl = string.length;\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result;\n  } : function(string){return string.split(/\\r\\n?|\\n/);};\n\n  var hasSelection = window.getSelection ? function(te) {\n    try { return te.selectionStart != te.selectionEnd; }\n    catch(e) { return false; }\n  } : function(te) {\n    try {var range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) return false;\n    return range.compareEndPoints(\"StartToEnd\", range) != 0;\n  };\n\n  var hasCopyEvent = (function() {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) return true;\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\";\n  })();\n\n  // KEY NAMES\n\n  var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n                  19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n                  36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n                  46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 107: \"=\", 109: \"-\", 127: \"Delete\",\n                  173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n                  221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n                  63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"};\n  CodeMirror.keyNames = keyNames;\n  (function() {\n    // Number keys\n    for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i);\n    // Alphabetic keys\n    for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n    // Function keys\n    for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n  })();\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) return f(from, to, \"ltr\");\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\");\n        found = true;\n      }\n    }\n    if (!found) f(from, to, \"ltr\");\n  }\n\n  function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }\n  function bidiRight(part) { return part.level % 2 ? part.from : part.to; }\n\n  function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }\n  function lineRight(line) {\n    var order = getOrder(line);\n    if (!order) return line.text.length;\n    return bidiRight(lst(order));\n  }\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) lineN = lineNo(visual);\n    var order = getOrder(visual);\n    var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);\n    return Pos(lineN, ch);\n  }\n  function lineEnd(cm, lineN) {\n    var merged, line = getLine(cm.doc, lineN);\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line;\n      lineN = null;\n    }\n    var order = getOrder(line);\n    var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);\n    return Pos(lineN == null ? lineNo(line) : lineN, ch);\n  }\n\n  function compareBidiLevel(order, a, b) {\n    var linedir = order[0].level;\n    if (a == linedir) return true;\n    if (b == linedir) return false;\n    return a < b;\n  }\n  var bidiOther;\n  function getBidiPartAt(order, pos) {\n    bidiOther = null;\n    for (var i = 0, found; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < pos && cur.to > pos) return i;\n      if ((cur.from == pos || cur.to == pos)) {\n        if (found == null) {\n          found = i;\n        } else if (compareBidiLevel(order, cur.level, order[found].level)) {\n          if (cur.from != cur.to) bidiOther = found;\n          return i;\n        } else {\n          if (cur.from != cur.to) bidiOther = i;\n          return found;\n        }\n      }\n    }\n    return found;\n  }\n\n  function moveInLine(line, pos, dir, byUnit) {\n    if (!byUnit) return pos + dir;\n    do pos += dir;\n    while (pos > 0 && isExtendingChar(line.text.charAt(pos)));\n    return pos;\n  }\n\n  // This is needed in order to move 'visually' through bi-directional\n  // text -- i.e., pressing left should make the cursor go left, even\n  // when in RTL text. The tricky part is the 'jumps', where RTL and\n  // LTR text touch each other. This often requires the cursor offset\n  // to move more than one unit, in order to visually move one unit.\n  function moveVisually(line, start, dir, byUnit) {\n    var bidi = getOrder(line);\n    if (!bidi) return moveLogically(line, start, dir, byUnit);\n    var pos = getBidiPartAt(bidi, start), part = bidi[pos];\n    var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);\n\n    for (;;) {\n      if (target > part.from && target < part.to) return target;\n      if (target == part.from || target == part.to) {\n        if (getBidiPartAt(bidi, target) == pos) return target;\n        part = bidi[pos += dir];\n        return (dir > 0) == part.level % 2 ? part.to : part.from;\n      } else {\n        part = bidi[pos += dir];\n        if (!part) return null;\n        if ((dir > 0) == part.level % 2)\n          target = moveInLine(line, part.to, -1, byUnit);\n        else\n          target = moveInLine(line, part.from, 1, byUnit);\n      }\n    }\n  }\n\n  function moveLogically(line, start, dir, byUnit) {\n    var target = start + dir;\n    if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir;\n    return target < 0 || target > line.text.length ? null : target;\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6ff\n    var arabicTypes = \"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm\";\n    function charType(code) {\n      if (code <= 0xf7) return lowTypes.charAt(code);\n      else if (0x590 <= code && code <= 0x5f4) return \"R\";\n      else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600);\n      else if (0x6ee <= code && code <= 0x8ac) return \"r\";\n      else if (0x2000 <= code && code <= 0x200b) return \"w\";\n      else if (code == 0x200c) return \"b\";\n      else return \"L\";\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n    // Browsers seem to always treat the boundaries of block elements as being L.\n    var outerType = \"L\";\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str) {\n      if (!bidiRE.test(str)) return false;\n      var len = str.length, types = [];\n      for (var i = 0, type; i < len; ++i)\n        types.push(type = charType(str.charCodeAt(i)));\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i = 0, prev = outerType; i < len; ++i) {\n        var type = types[i];\n        if (type == \"m\") types[i] = prev;\n        else prev = type;\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i = 0, cur = outerType; i < len; ++i) {\n        var type = types[i];\n        if (type == \"1\" && cur == \"r\") types[i] = \"n\";\n        else if (isStrong.test(type)) { cur = type; if (type == \"r\") types[i] = \"R\"; }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i = 1, prev = types[0]; i < len - 1; ++i) {\n        var type = types[i];\n        if (type == \"+\" && prev == \"1\" && types[i+1] == \"1\") types[i] = \"1\";\n        else if (type == \",\" && prev == types[i+1] &&\n                 (prev == \"1\" || prev == \"n\")) types[i] = prev;\n        prev = type;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i = 0; i < len; ++i) {\n        var type = types[i];\n        if (type == \",\") types[i] = \"N\";\n        else if (type == \"%\") {\n          for (var end = i + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i && types[i-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i; j < end; ++j) types[j] = replace;\n          i = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i = 0, cur = outerType; i < len; ++i) {\n        var type = types[i];\n        if (cur == \"L\" && type == \"1\") types[i] = \"L\";\n        else if (isStrong.test(type)) cur = type;\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i = 0; i < len; ++i) {\n        if (isNeutral.test(types[i])) {\n          for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}\n          var before = (i ? types[i-1] : outerType) == \"L\";\n          var after = (end < len ? types[end] : outerType) == \"L\";\n          var replace = before || after ? \"L\" : \"R\";\n          for (var j = i; j < end; ++j) types[j] = replace;\n          i = end - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i = 0; i < len;) {\n        if (countsAsLeft.test(types[i])) {\n          var start = i;\n          for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}\n          order.push(new BidiSpan(0, start, i));\n        } else {\n          var pos = i, at = order.length;\n          for (++i; i < len && types[i] != \"L\"; ++i) {}\n          for (var j = pos; j < i;) {\n            if (countsAsNum.test(types[j])) {\n              if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j));\n              var nstart = j;\n              for (++j; j < i && countsAsNum.test(types[j]); ++j) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j));\n              pos = j;\n            } else ++j;\n          }\n          if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i));\n        }\n      }\n      if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n        order[0].from = m[0].length;\n        order.unshift(new BidiSpan(0, 0, m[0].length));\n      }\n      if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n        lst(order).to -= m[0].length;\n        order.push(new BidiSpan(0, len - m[0].length, len));\n      }\n      if (order[0].level != lst(order).level)\n        order.push(new BidiSpan(order[0].level, len, len));\n\n      return order;\n    };\n  })();\n\n  // THE END\n\n  CodeMirror.version = \"4.1.1\";\n\n  return CodeMirror;\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/lib/codemirror.css": {
            "type": "text/css",
            "title": "$:/plugins/tiddlywiki/codemirror/lib/codemirror.css",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n}\n.CodeMirror-scroll {\n  /* Set scrolling behaviour here */\n  overflow: auto;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n/* CURSOR */\n\n.CodeMirror div.CodeMirror-cursor {\n  border-left: 1px solid black;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {\n  width: auto;\n  border: 0;\n  background: #7e7;\n}\n/* Can style cursor different in overwrite (non-insert) mode */\ndiv.CodeMirror-overwrite div.CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; }\n\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  line-height: 1;\n  position: relative;\n  overflow: hidden;\n  background: white;\n  color: black;\n}\n\n.CodeMirror-scroll {\n  /* 30px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -30px; margin-right: -30px;\n  padding-bottom: 30px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 30px solid transparent;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actuall scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  padding-bottom: 30px;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  padding-bottom: 30px;\n  margin-bottom: -32px;\n  display: inline-block;\n  /* Hack to make IE7 behave */\n  *zoom:1;\n  *display:inline;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n\n.CodeMirror-lines {\n  cursor: text;\n}\n.CodeMirror pre {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n}\n.CodeMirror-wrap pre {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  overflow: auto;\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-wrap .CodeMirror-scroll {\n  overflow-x: hidden;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n.CodeMirror-measure pre { position: static; }\n\n.CodeMirror div.CodeMirror-cursor {\n  position: absolute;\n  border-right: none;\n  width: 0;\n}\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 1;\n}\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n\n.cm-searching {\n  background: #ffa;\n  background: rgba(255, 255, 0, .4);\n}\n\n/* IE7 hack to prevent it from returning funny offsetTops on the spans */\n.CodeMirror span { *vertical-align: text-bottom; }\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n"
        },
        "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css": {
            "type": "text/css",
            "title": "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": ".CodeMirror-dialog {\n  position: absolute;\n  left: 0; right: 0;\n  background: white;\n  z-index: 15;\n  padding: .1em .8em;\n  overflow: hidden;\n  color: #333;\n}\n\n.CodeMirror-dialog-top {\n  border-bottom: 1px solid #eee;\n  top: 0;\n}\n\n.CodeMirror-dialog-bottom {\n  border-top: 1px solid #eee;\n  bottom: 0;\n}\n\n.CodeMirror-dialog input {\n  border: none;\n  outline: none;\n  background: transparent;\n  width: 20em;\n  color: inherit;\n  font-family: monospace;\n}\n\n.CodeMirror-dialog button {\n  font-size: 70%;\n}\n"
        },
        "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js",
            "module-type": "library",
            "text": "// Open simple dialogs on top of an editor. Relies on dialog.css.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.getWrapperElement();\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom) {\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-bottom\";\n    } else {\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-top\";\n    }\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    closeNotification(this, null);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, me = this;\n    function close() {\n      if (closed) return;\n      closed = true;\n      dialog.parentNode.removeChild(dialog);\n    }\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      if (options && options.value) inp.value = options.value;\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 13 || e.keyCode == 27) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n          me.focus();\n          if (e.keyCode == 13) callback(inp.value);\n        }\n      });\n      if (options && options.onKeyUp) {\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n      }\n      if (options && options.value) inp.value = options.value;\n      inp.focus();\n      CodeMirror.on(inp, \"blur\", close);\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n      button.focus();\n      CodeMirror.on(button, \"blur\", close);\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openConfirm\", function(template, callbacks, options) {\n    closeNotification(this, null);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var buttons = dialog.getElementsByTagName(\"button\");\n    var closed = false, me = this, blurring = 1;\n    function close() {\n      if (closed) return;\n      closed = true;\n      dialog.parentNode.removeChild(dialog);\n      me.focus();\n    }\n    buttons[0].focus();\n    for (var i = 0; i < buttons.length; ++i) {\n      var b = buttons[i];\n      (function(callback) {\n        CodeMirror.on(b, \"click\", function(e) {\n          CodeMirror.e_preventDefault(e);\n          close();\n          if (callback) callback(me);\n        });\n      })(callbacks[i]);\n      CodeMirror.on(b, \"blur\", function() {\n        --blurring;\n        setTimeout(function() { if (blurring <= 0) close(); }, 200);\n      });\n      CodeMirror.on(b, \"focus\", function() { ++blurring; });\n    }\n  });\n\n  /*\n   * openNotification\n   * Opens a notification, that can be closed with an optional timer\n   * (default 5000ms timer) and always closes on click.\n   *\n   * If a notification is opened while another is opened, it will close the\n   * currently opened one and open the new one immediately.\n   */\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var duration = options && (options.duration === undefined ? 5000 : options.duration);\n    var closed = false, doneTimer;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n    if (duration)\n      doneTimer = setTimeout(close, options.duration);\n  });\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js",
            "module-type": "library",
            "text": "(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n    (document.documentMode == null || document.documentMode < 8);\n\n  var Pos = CodeMirror.Pos;\n\n  var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n\n  function findMatchingBracket(cm, where, strict, config) {\n    var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n    var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n    if (!match) return null;\n    var dir = match.charAt(1) == \">\" ? 1 : -1;\n    if (strict && (dir > 0) != (pos == where.ch)) return null;\n    var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n    var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);\n    if (found == null) return null;\n    return {from: Pos(where.line, pos), to: found && found.pos,\n            match: found && found.ch == match.charAt(0), forward: dir > 0};\n  }\n\n  // bracketRegex is used to specify which type of bracket to scan\n  // should be a regexp, e.g. /[[\\]]/\n  //\n  // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n  //\n  // Returns false when no bracket was found, null when it reached\n  // maxScanLines and gave up\n  function scanForBracket(cm, where, dir, style, config) {\n    var maxScanLen = (config && config.maxScanLineLength) || 10000;\n    var maxScanLines = (config && config.maxScanLines) || 1000;\n\n    var stack = [];\n    var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\\]]/;\n    var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n                          : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n    for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n      var line = cm.getLine(lineNo);\n      if (!line) continue;\n      var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n      if (line.length > maxScanLen) continue;\n      if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n      for (; pos != end; pos += dir) {\n        var ch = line.charAt(pos);\n        if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {\n          var match = matching[ch];\n          if ((match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n          else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n          else stack.pop();\n        }\n      }\n    }\n    return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n  }\n\n  function matchBrackets(cm, autoclear, config) {\n    // Disable brace matching in long lines, since it'll cause hugely slow updates\n    var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;\n    var marks = [], ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config);\n      if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {\n        var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n        marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n        if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n          marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n      }\n    }\n\n    if (marks.length) {\n      // Kludge to work around the IE bug from issue #1193, where text\n      // input stops going to the textare whever this fires.\n      if (ie_lt8 && cm.state.focused) cm.display.input.focus();\n\n      var clear = function() {\n        cm.operation(function() {\n          for (var i = 0; i < marks.length; i++) marks[i].clear();\n        });\n      };\n      if (autoclear) setTimeout(clear, 800);\n      else return clear;\n    }\n  }\n\n  var currentlyHighlighted = null;\n  function doMatchBrackets(cm) {\n    cm.operation(function() {\n      if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}\n      currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n    });\n  }\n\n  CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init)\n      cm.off(\"cursorActivity\", doMatchBrackets);\n    if (val) {\n      cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n      cm.on(\"cursorActivity\", doMatchBrackets);\n    }\n  });\n\n  CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n  CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, strict, config){\n    return findMatchingBracket(this, pos, strict, config);\n  });\n  CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n    return scanForBracket(this, pos, dir, style, config);\n  });\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js",
            "module-type": "library",
            "text": "(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  var Pos = CodeMirror.Pos;\n\n  function SearchCursor(doc, query, pos, caseFold) {\n    this.atOccurrence = false; this.doc = doc;\n    if (caseFold == null && typeof query == \"string\") caseFold = false;\n\n    pos = pos ? doc.clipPos(pos) : Pos(0, 0);\n    this.pos = {from: pos, to: pos};\n\n    // The matches method is filled in based on the type of query.\n    // It takes a position and a direction, and returns an object\n    // describing the next occurrence of the query, or null if no\n    // more matches were found.\n    if (typeof query != \"string\") { // Regexp match\n      if (!query.global) query = new RegExp(query.source, query.ignoreCase ? \"ig\" : \"g\");\n      this.matches = function(reverse, pos) {\n        if (reverse) {\n          query.lastIndex = 0;\n          var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start;\n          for (;;) {\n            query.lastIndex = cutOff;\n            var newMatch = query.exec(line);\n            if (!newMatch) break;\n            match = newMatch;\n            start = match.index;\n            cutOff = match.index + (match[0].length || 1);\n            if (cutOff == line.length) break;\n          }\n          var matchLen = (match && match[0].length) || 0;\n          if (!matchLen) {\n            if (start == 0 && line.length == 0) {match = undefined;}\n            else if (start != doc.getLine(pos.line).length) {\n              matchLen++;\n            }\n          }\n        } else {\n          query.lastIndex = pos.ch;\n          var line = doc.getLine(pos.line), match = query.exec(line);\n          var matchLen = (match && match[0].length) || 0;\n          var start = match && match.index;\n          if (start + matchLen != line.length && !matchLen) matchLen = 1;\n        }\n        if (match && matchLen)\n          return {from: Pos(pos.line, start),\n                  to: Pos(pos.line, start + matchLen),\n                  match: match};\n      };\n    } else { // String query\n      var origQuery = query;\n      if (caseFold) query = query.toLowerCase();\n      var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;};\n      var target = query.split(\"\\n\");\n      // Different methods for single-line and multi-line queries\n      if (target.length == 1) {\n        if (!query.length) {\n          // Empty string would match anything and never progress, so\n          // we define it to match nothing instead.\n          this.matches = function() {};\n        } else {\n          this.matches = function(reverse, pos) {\n            if (reverse) {\n              var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig);\n              var match = line.lastIndexOf(query);\n              if (match > -1) {\n                match = adjustPos(orig, line, match);\n                return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)};\n              }\n             } else {\n               var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig);\n               var match = line.indexOf(query);\n               if (match > -1) {\n                 match = adjustPos(orig, line, match) + pos.ch;\n                 return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)};\n               }\n            }\n          };\n        }\n      } else {\n        var origTarget = origQuery.split(\"\\n\");\n        this.matches = function(reverse, pos) {\n          var last = target.length - 1;\n          if (reverse) {\n            if (pos.line - (target.length - 1) < doc.firstLine()) return;\n            if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return;\n            var to = Pos(pos.line, origTarget[last].length);\n            for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln)\n              if (target[i] != fold(doc.getLine(ln))) return;\n            var line = doc.getLine(ln), cut = line.length - origTarget[0].length;\n            if (fold(line.slice(cut)) != target[0]) return;\n            return {from: Pos(ln, cut), to: to};\n          } else {\n            if (pos.line + (target.length - 1) > doc.lastLine()) return;\n            var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length;\n            if (fold(line.slice(cut)) != target[0]) return;\n            var from = Pos(pos.line, cut);\n            for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln)\n              if (target[i] != fold(doc.getLine(ln))) return;\n            if (doc.getLine(ln).slice(0, origTarget[last].length) != target[last]) return;\n            return {from: from, to: Pos(ln, origTarget[last].length)};\n          }\n        };\n      }\n    }\n  }\n\n  SearchCursor.prototype = {\n    findNext: function() {return this.find(false);},\n    findPrevious: function() {return this.find(true);},\n\n    find: function(reverse) {\n      var self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to);\n      function savePosAndFail(line) {\n        var pos = Pos(line, 0);\n        self.pos = {from: pos, to: pos};\n        self.atOccurrence = false;\n        return false;\n      }\n\n      for (;;) {\n        if (this.pos = this.matches(reverse, pos)) {\n          this.atOccurrence = true;\n          return this.pos.match || true;\n        }\n        if (reverse) {\n          if (!pos.line) return savePosAndFail(0);\n          pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length);\n        }\n        else {\n          var maxLine = this.doc.lineCount();\n          if (pos.line == maxLine - 1) return savePosAndFail(maxLine);\n          pos = Pos(pos.line + 1, 0);\n        }\n      }\n    },\n\n    from: function() {if (this.atOccurrence) return this.pos.from;},\n    to: function() {if (this.atOccurrence) return this.pos.to;},\n\n    replace: function(newText) {\n      if (!this.atOccurrence) return;\n      var lines = CodeMirror.splitLines(newText);\n      this.doc.replaceRange(lines, this.pos.from, this.pos.to);\n      this.pos.to = Pos(this.pos.from.line + lines.length - 1,\n                        lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0));\n    }\n  };\n\n  // Maps a position in a case-folded line back to a position in the original line\n  // (compensating for codepoints increasing in number during folding)\n  function adjustPos(orig, folded, pos) {\n    if (orig.length == folded.length) return pos;\n    for (var pos1 = Math.min(pos, orig.length);;) {\n      var len1 = orig.slice(0, pos1).toLowerCase().length;\n      if (len1 < pos) ++pos1;\n      else if (len1 > pos) --pos1;\n      else return pos1;\n    }\n  }\n\n  CodeMirror.defineExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this.doc, query, pos, caseFold);\n  });\n  CodeMirror.defineDocExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this, query, pos, caseFold);\n  });\n\n  CodeMirror.defineExtension(\"selectMatches\", function(query, caseFold) {\n    var ranges = [], next;\n    var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold);\n    while (next = cur.findNext()) {\n      if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break;\n      ranges.push({anchor: cur.from(), head: cur.to()});\n    }\n    if (ranges.length)\n      this.setSelections(ranges, 0);\n  });\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js",
            "module-type": "library",
            "text": "// TODO actually recognize syntax of TypeScript constructs\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var statementIndent = parserConfig.statementIndent;\n  var jsonldMode = parserConfig.jsonld;\n  var jsonMode = parserConfig.json || jsonldMode;\n  var isTS = parserConfig.typescript;\n\n  // Tokenizer\n\n  var keywords = function(){\n    function kw(type) {return {type: type, style: \"keyword\"};}\n    var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n    var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n    var jsKeywords = {\n      \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n      \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C, \"debugger\": C,\n      \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n      \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n      \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n      \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n      \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n      \"this\": kw(\"this\"), \"module\": kw(\"module\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n      \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C\n    };\n\n    // Extend the 'normal' keywords with the TypeScript language extensions\n    if (isTS) {\n      var type = {type: \"variable\", style: \"variable-3\"};\n      var tsKeywords = {\n        // object-like things\n        \"interface\": kw(\"interface\"),\n        \"extends\": kw(\"extends\"),\n        \"constructor\": kw(\"constructor\"),\n\n        // scope modifiers\n        \"public\": kw(\"public\"),\n        \"private\": kw(\"private\"),\n        \"protected\": kw(\"protected\"),\n        \"static\": kw(\"static\"),\n\n        // types\n        \"string\": type, \"number\": type, \"bool\": type, \"any\": type\n      };\n\n      for (var attr in tsKeywords) {\n        jsKeywords[attr] = tsKeywords[attr];\n      }\n    }\n\n    return jsKeywords;\n  }();\n\n  var isOperatorChar = /[+\\-*&%=<>!?|~^]/;\n  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n  function readRegexp(stream) {\n    var escaped = false, next, inSet = false;\n    while ((next = stream.next()) != null) {\n      if (!escaped) {\n        if (next == \"/\" && !inSet) return;\n        if (next == \"[\") inSet = true;\n        else if (inSet && next == \"]\") inSet = false;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n      return ret(\"number\", \"number\");\n    } else if (ch == \".\" && stream.match(\"..\")) {\n      return ret(\"spread\", \"meta\");\n    } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      return ret(ch);\n    } else if (ch == \"=\" && stream.eat(\">\")) {\n      return ret(\"=>\", \"operator\");\n    } else if (ch == \"0\" && stream.eat(/x/i)) {\n      stream.eatWhile(/[\\da-f]/i);\n      return ret(\"number\", \"number\");\n    } else if (/\\d/.test(ch)) {\n      stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      } else if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return ret(\"comment\", \"comment\");\n      } else if (state.lastType == \"operator\" || state.lastType == \"keyword c\" ||\n               state.lastType == \"sof\" || /^[\\[{}\\(,;:]$/.test(state.lastType)) {\n        readRegexp(stream);\n        stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\n        return ret(\"regexp\", \"string-2\");\n      } else {\n        stream.eatWhile(isOperatorChar);\n        return ret(\"operator\", \"operator\", stream.current());\n      }\n    } else if (ch == \"`\") {\n      state.tokenize = tokenQuasi;\n      return tokenQuasi(stream, state);\n    } else if (ch == \"#\") {\n      stream.skipToEnd();\n      return ret(\"error\", \"error\");\n    } else if (isOperatorChar.test(ch)) {\n      stream.eatWhile(isOperatorChar);\n      return ret(\"operator\", \"operator\", stream.current());\n    } else {\n      stream.eatWhile(/[\\w\\$_]/);\n      var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n      return (known && state.lastType != \".\") ? ret(known.type, known.style, word) :\n                     ret(\"variable\", \"variable\", word);\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next;\n      if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n        state.tokenize = tokenBase;\n        return ret(\"jsonld-keyword\", \"meta\");\n      }\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) break;\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (!escaped) state.tokenize = tokenBase;\n      return ret(\"string\", \"string\");\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n  function tokenQuasi(stream, state) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    return ret(\"quasi\", \"string-2\", stream.current());\n  }\n\n  var brackets = \"([{}])\";\n  // This is a crude lookahead trick to try and notice that we're\n  // parsing the argument patterns for a fat-arrow function before we\n  // actually hit the arrow token. It only works if the arrow is on\n  // the same line as the arguments and there's no strange noise\n  // (comments) in between. Fallback is to only notice when we hit the\n  // arrow, and not declare the arguments as locals for the arrow\n  // body.\n  function findFatArrow(stream, state) {\n    if (state.fatArrowAt) state.fatArrowAt = null;\n    var arrow = stream.string.indexOf(\"=>\", stream.start);\n    if (arrow < 0) return;\n\n    var depth = 0, sawSomething = false;\n    for (var pos = arrow - 1; pos >= 0; --pos) {\n      var ch = stream.string.charAt(pos);\n      var bracket = brackets.indexOf(ch);\n      if (bracket >= 0 && bracket < 3) {\n        if (!depth) { ++pos; break; }\n        if (--depth == 0) break;\n      } else if (bracket >= 3 && bracket < 6) {\n        ++depth;\n      } else if (/[$\\w]/.test(ch)) {\n        sawSomething = true;\n      } else if (sawSomething && !depth) {\n        ++pos;\n        break;\n      }\n    }\n    if (sawSomething && !depth) state.fatArrowAt = pos;\n  }\n\n  // Parser\n\n  var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n  function JSLexical(indented, column, type, align, prev, info) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.prev = prev;\n    this.info = info;\n    if (align != null) this.align = align;\n  }\n\n  function inScope(state, varname) {\n    for (var v = state.localVars; v; v = v.next)\n      if (v.name == varname) return true;\n    for (var cx = state.context; cx; cx = cx.prev) {\n      for (var v = cx.vars; v; v = v.next)\n        if (v.name == varname) return true;\n    }\n  }\n\n  function parseJS(state, style, type, content, stream) {\n    var cc = state.cc;\n    // Communicate our context to the combinators.\n    // (Less wasteful than consing up a hundred closures on every call.)\n    cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\n\n    if (!state.lexical.hasOwnProperty(\"align\"))\n      state.lexical.align = true;\n\n    while(true) {\n      var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n      if (combinator(type, content)) {\n        while(cc.length && cc[cc.length - 1].lex)\n          cc.pop()();\n        if (cx.marked) return cx.marked;\n        if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n        return style;\n      }\n    }\n  }\n\n  // Combinator utils\n\n  var cx = {state: null, column: null, marked: null, cc: null};\n  function pass() {\n    for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n  }\n  function cont() {\n    pass.apply(null, arguments);\n    return true;\n  }\n  function register(varname) {\n    function inList(list) {\n      for (var v = list; v; v = v.next)\n        if (v.name == varname) return true;\n      return false;\n    }\n    var state = cx.state;\n    if (state.context) {\n      cx.marked = \"def\";\n      if (inList(state.localVars)) return;\n      state.localVars = {name: varname, next: state.localVars};\n    } else {\n      if (inList(state.globalVars)) return;\n      if (parserConfig.globalVars)\n        state.globalVars = {name: varname, next: state.globalVars};\n    }\n  }\n\n  // Combinators\n\n  var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n  function pushcontext() {\n    cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    cx.state.localVars = defaultVars;\n  }\n  function popcontext() {\n    cx.state.localVars = cx.state.context.vars;\n    cx.state.context = cx.state.context.prev;\n  }\n  function pushlex(type, info) {\n    var result = function() {\n      var state = cx.state, indent = state.indented;\n      if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n    };\n    result.lex = true;\n    return result;\n  }\n  function poplex() {\n    var state = cx.state;\n    if (state.lexical.prev) {\n      if (state.lexical.type == \")\")\n        state.indented = state.lexical.indented;\n      state.lexical = state.lexical.prev;\n    }\n  }\n  poplex.lex = true;\n\n  function expect(wanted) {\n    function exp(type) {\n      if (type == wanted) return cont();\n      else if (wanted == \";\") return pass();\n      else return cont(exp);\n    };\n    return exp;\n  }\n\n  function statement(type, value) {\n    if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n    if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n    if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n    if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n    if (type == \";\") return cont();\n    if (type == \"if\") {\n      if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n        cx.state.cc.pop()();\n      return cont(pushlex(\"form\"), expression, statement, poplex, maybeelse);\n    }\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n    if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n    if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n                                      block, poplex, poplex);\n    if (type == \"case\") return cont(expression, expect(\":\"));\n    if (type == \"default\") return cont(expect(\":\"));\n    if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n                                     statement, poplex, popcontext);\n    if (type == \"module\") return cont(pushlex(\"form\"), pushcontext, afterModule, popcontext, poplex);\n    if (type == \"class\") return cont(pushlex(\"form\"), className, objlit, poplex);\n    if (type == \"export\") return cont(pushlex(\"form\"), afterExport, poplex);\n    if (type == \"import\") return cont(pushlex(\"form\"), afterImport, poplex);\n    return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n  }\n  function expression(type) {\n    return expressionInner(type, false);\n  }\n  function expressionNoComma(type) {\n    return expressionInner(type, true);\n  }\n  function expressionInner(type, noComma) {\n    if (cx.state.fatArrowAt == cx.stream.start) {\n      var body = noComma ? arrowBodyNoComma : arrowBody;\n      if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(pattern, \")\"), poplex, expect(\"=>\"), body, popcontext);\n      else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n    }\n\n    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n    if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n    if (type == \"function\") return cont(functiondef, maybeop);\n    if (type == \"keyword c\") return cont(noComma ? maybeexpressionNoComma : maybeexpression);\n    if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, comprehension, expect(\")\"), poplex, maybeop);\n    if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n    if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n    if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n    if (type == \"quasi\") { return pass(quasi, maybeop); }\n    return cont();\n  }\n  function maybeexpression(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expression);\n  }\n  function maybeexpressionNoComma(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expressionNoComma);\n  }\n\n  function maybeoperatorComma(type, value) {\n    if (type == \",\") return cont(expression);\n    return maybeoperatorNoComma(type, value, false);\n  }\n  function maybeoperatorNoComma(type, value, noComma) {\n    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n    var expr = noComma == false ? expression : expressionNoComma;\n    if (value == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n    if (type == \"operator\") {\n      if (/\\+\\+|--/.test(value)) return cont(me);\n      if (value == \"?\") return cont(expression, expect(\":\"), expr);\n      return cont(expr);\n    }\n    if (type == \"quasi\") { return pass(quasi, me); }\n    if (type == \";\") return;\n    if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n    if (type == \".\") return cont(property, me);\n    if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n  }\n  function quasi(type, value) {\n    if (type != \"quasi\") return pass();\n    if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n    return cont(expression, continueQuasi);\n  }\n  function continueQuasi(type) {\n    if (type == \"}\") {\n      cx.marked = \"string-2\";\n      cx.state.tokenize = tokenQuasi;\n      return cont(quasi);\n    }\n  }\n  function arrowBody(type) {\n    findFatArrow(cx.stream, cx.state);\n    if (type == \"{\") return pass(statement);\n    return pass(expression);\n  }\n  function arrowBodyNoComma(type) {\n    findFatArrow(cx.stream, cx.state);\n    if (type == \"{\") return pass(statement);\n    return pass(expressionNoComma);\n  }\n  function maybelabel(type) {\n    if (type == \":\") return cont(poplex, statement);\n    return pass(maybeoperatorComma, expect(\";\"), poplex);\n  }\n  function property(type) {\n    if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n  }\n  function objprop(type, value) {\n    if (type == \"variable\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(getterSetter);\n    } else if (type == \"number\" || type == \"string\") {\n      cx.marked = jsonldMode ? \"property\" : (type + \" property\");\n    } else if (type == \"[\") {\n      return cont(expression, expect(\"]\"), afterprop);\n    }\n    if (atomicTypes.hasOwnProperty(type)) return cont(afterprop);\n  }\n  function getterSetter(type) {\n    if (type != \"variable\") return pass(afterprop);\n    cx.marked = \"property\";\n    return cont(functiondef);\n  }\n  function afterprop(type) {\n    if (type == \":\") return cont(expressionNoComma);\n    if (type == \"(\") return pass(functiondef);\n  }\n  function commasep(what, end) {\n    function proceed(type) {\n      if (type == \",\") {\n        var lex = cx.state.lexical;\n        if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n        return cont(what, proceed);\n      }\n      if (type == end) return cont();\n      return cont(expect(end));\n    }\n    return function(type) {\n      if (type == end) return cont();\n      return pass(what, proceed);\n    };\n  }\n  function contCommasep(what, end, info) {\n    for (var i = 3; i < arguments.length; i++)\n      cx.cc.push(arguments[i]);\n    return cont(pushlex(end, info), commasep(what, end), poplex);\n  }\n  function block(type) {\n    if (type == \"}\") return cont();\n    return pass(statement, block);\n  }\n  function maybetype(type) {\n    if (isTS && type == \":\") return cont(typedef);\n  }\n  function typedef(type) {\n    if (type == \"variable\"){cx.marked = \"variable-3\"; return cont();}\n  }\n  function vardef() {\n    return pass(pattern, maybetype, maybeAssign, vardefCont);\n  }\n  function pattern(type, value) {\n    if (type == \"variable\") { register(value); return cont(); }\n    if (type == \"[\") return contCommasep(pattern, \"]\");\n    if (type == \"{\") return contCommasep(proppattern, \"}\");\n  }\n  function proppattern(type, value) {\n    if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n      register(value);\n      return cont(maybeAssign);\n    }\n    if (type == \"variable\") cx.marked = \"property\";\n    return cont(expect(\":\"), pattern, maybeAssign);\n  }\n  function maybeAssign(_type, value) {\n    if (value == \"=\") return cont(expressionNoComma);\n  }\n  function vardefCont(type) {\n    if (type == \",\") return cont(vardef);\n  }\n  function maybeelse(type, value) {\n    if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n  }\n  function forspec(type) {\n    if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n  }\n  function forspec1(type) {\n    if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n    if (type == \";\") return cont(forspec2);\n    if (type == \"variable\") return cont(formaybeinof);\n    return pass(expression, expect(\";\"), forspec2);\n  }\n  function formaybeinof(_type, value) {\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return cont(maybeoperatorComma, forspec2);\n  }\n  function forspec2(type, value) {\n    if (type == \";\") return cont(forspec3);\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return pass(expression, expect(\";\"), forspec3);\n  }\n  function forspec3(type) {\n    if (type != \")\") cont(expression);\n  }\n  function functiondef(type, value) {\n    if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n    if (type == \"variable\") {register(value); return cont(functiondef);}\n    if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, statement, popcontext);\n  }\n  function funarg(type) {\n    if (type == \"spread\") return cont(funarg);\n    return pass(pattern, maybetype);\n  }\n  function className(type, value) {\n    if (type == \"variable\") {register(value); return cont(classNameAfter);}\n  }\n  function classNameAfter(_type, value) {\n    if (value == \"extends\") return cont(expression);\n  }\n  function objlit(type) {\n    if (type == \"{\") return contCommasep(objprop, \"}\");\n  }\n  function afterModule(type, value) {\n    if (type == \"string\") return cont(statement);\n    if (type == \"variable\") { register(value); return cont(maybeFrom); }\n  }\n  function afterExport(_type, value) {\n    if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n    if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n    return pass(statement);\n  }\n  function afterImport(type) {\n    if (type == \"string\") return cont();\n    return pass(importSpec, maybeFrom);\n  }\n  function importSpec(type, value) {\n    if (type == \"{\") return contCommasep(importSpec, \"}\");\n    if (type == \"variable\") register(value);\n    return cont();\n  }\n  function maybeFrom(_type, value) {\n    if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n  }\n  function arrayLiteral(type) {\n    if (type == \"]\") return cont();\n    return pass(expressionNoComma, maybeArrayComprehension);\n  }\n  function maybeArrayComprehension(type) {\n    if (type == \"for\") return pass(comprehension, expect(\"]\"));\n    if (type == \",\") return cont(commasep(expressionNoComma, \"]\"));\n    return pass(commasep(expressionNoComma, \"]\"));\n  }\n  function comprehension(type) {\n    if (type == \"for\") return cont(forspec, comprehension);\n    if (type == \"if\") return cont(expression, comprehension);\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      var state = {\n        tokenize: tokenBase,\n        lastType: \"sof\",\n        cc: [],\n        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n        localVars: parserConfig.localVars,\n        context: parserConfig.localVars && {vars: parserConfig.localVars},\n        indented: 0\n      };\n      if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n        state.globalVars = parserConfig.globalVars;\n      return state;\n    },\n\n    token: function(stream, state) {\n      if (stream.sol()) {\n        if (!state.lexical.hasOwnProperty(\"align\"))\n          state.lexical.align = false;\n        state.indented = stream.indentation();\n        findFatArrow(stream, state);\n      }\n      if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n      var style = state.tokenize(stream, state);\n      if (type == \"comment\") return style;\n      state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n      return parseJS(state, style, type, content, stream);\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == tokenComment) return CodeMirror.Pass;\n      if (state.tokenize != tokenBase) return 0;\n      var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;\n      // Kludge to prevent 'maybelse' from blocking lexical scope pops\n      if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n        var c = state.cc[i];\n        if (c == poplex) lexical = lexical.prev;\n        else if (c != maybeelse) break;\n      }\n      if (lexical.type == \"stat\" && firstChar == \"}\") lexical = lexical.prev;\n      if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n        lexical = lexical.prev;\n      var type = lexical.type, closing = firstChar == type;\n\n      if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n      else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n      else if (type == \"form\") return lexical.indented + indentUnit;\n      else if (type == \"stat\")\n        return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? statementIndent || indentUnit : 0);\n      else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n        return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n      else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n      else return lexical.indented + (closing ? 0 : indentUnit);\n    },\n\n    electricChars: \":{}\",\n    blockCommentStart: jsonMode ? null : \"/*\",\n    blockCommentEnd: jsonMode ? null : \"*/\",\n    lineComment: jsonMode ? null : \"//\",\n    fold: \"brace\",\n\n    helperType: jsonMode ? \"json\" : \"javascript\",\n    jsonldMode: jsonldMode,\n    jsonMode: jsonMode\n  };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/keymap/vim.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/keymap/vim.js",
            "module-type": "library",
            "text": "/**\n * Supported keybindings:\n *\n *   Motion:\n *   h, j, k, l\n *   gj, gk\n *   e, E, w, W, b, B, ge, gE\n *   f<character>, F<character>, t<character>, T<character>\n *   $, ^, 0, -, +, _\n *   gg, G\n *   %\n *   '<character>, `<character>\n *\n *   Operator:\n *   d, y, c\n *   dd, yy, cc\n *   g~, g~g~\n *   >, <, >>, <<\n *\n *   Operator-Motion:\n *   x, X, D, Y, C, ~\n *\n *   Action:\n *   a, i, s, A, I, S, o, O\n *   zz, z., z<CR>, zt, zb, z-\n *   J\n *   u, Ctrl-r\n *   m<character>\n *   r<character>\n *\n *   Modes:\n *   ESC - leave insert mode, visual mode, and clear input state.\n *   Ctrl-[, Ctrl-c - same as ESC.\n *\n * Registers: unnamed, -, a-z, A-Z, 0-9\n *   (Does not respect the special case for number registers when delete\n *    operator is made with these commands: %, (, ),  , /, ?, n, N, {, } )\n *   TODO: Implement the remaining registers.\n * Marks: a-z, A-Z, and 0-9\n *   TODO: Implement the remaining special marks. They have more complex\n *       behavior.\n *\n * Events:\n *  'vim-mode-change' - raised on the editor anytime the current mode changes,\n *                      Event object: {mode: \"visual\", subMode: \"linewise\"}\n *\n * Code structure:\n *  1. Default keymap\n *  2. Variable declarations and short basic helpers\n *  3. Instance (External API) implementation\n *  4. Internal state tracking objects (input state, counter) implementation\n *     and instanstiation\n *  5. Key handler (the main command dispatcher) implementation\n *  6. Motion, operator, and action implementations\n *  7. Helper functions for the key handler, motions, operators, and actions\n *  8. Set up Vim to work as a keymap for CodeMirror.\n */\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"), require(\"../addon/search/searchcursor\"), require(\"../addon/dialog/dialog\"), require(\"../addon/edit/matchbrackets.js\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\", \"../addon/search/searchcursor\", \"../addon/dialog/dialog\", \"../addon/edit/matchbrackets\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  'use strict';\n\n  var defaultKeymap = [\n    // Key to key mapping. This goes first to make it possible to override\n    // existing mappings.\n    { keys: ['<Left>'], type: 'keyToKey', toKeys: ['h'] },\n    { keys: ['<Right>'], type: 'keyToKey', toKeys: ['l'] },\n    { keys: ['<Up>'], type: 'keyToKey', toKeys: ['k'] },\n    { keys: ['<Down>'], type: 'keyToKey', toKeys: ['j'] },\n    { keys: ['<Space>'], type: 'keyToKey', toKeys: ['l'] },\n    { keys: ['<BS>'], type: 'keyToKey', toKeys: ['h'] },\n    { keys: ['<C-Space>'], type: 'keyToKey', toKeys: ['W'] },\n    { keys: ['<C-BS>'], type: 'keyToKey', toKeys: ['B'] },\n    { keys: ['<S-Space>'], type: 'keyToKey', toKeys: ['w'] },\n    { keys: ['<S-BS>'], type: 'keyToKey', toKeys: ['b'] },\n    { keys: ['<C-n>'], type: 'keyToKey', toKeys: ['j'] },\n    { keys: ['<C-p>'], type: 'keyToKey', toKeys: ['k'] },\n    { keys: ['<C-[>'], type: 'keyToKey', toKeys: ['<Esc>'] },\n    { keys: ['<C-c>'], type: 'keyToKey', toKeys: ['<Esc>'] },\n    { keys: ['s'], type: 'keyToKey', toKeys: ['c', 'l'], context: 'normal' },\n    { keys: ['s'], type: 'keyToKey', toKeys: ['x', 'i'], context: 'visual'},\n    { keys: ['S'], type: 'keyToKey', toKeys: ['c', 'c'], context: 'normal' },\n    { keys: ['S'], type: 'keyToKey', toKeys: ['d', 'c', 'c'], context: 'visual' },\n    { keys: ['<Home>'], type: 'keyToKey', toKeys: ['0'] },\n    { keys: ['<End>'], type: 'keyToKey', toKeys: ['$'] },\n    { keys: ['<PageUp>'], type: 'keyToKey', toKeys: ['<C-b>'] },\n    { keys: ['<PageDown>'], type: 'keyToKey', toKeys: ['<C-f>'] },\n    { keys: ['<CR>'], type: 'keyToKey', toKeys: ['j', '^'], context: 'normal' },\n    // Motions\n    { keys: ['H'], type: 'motion',\n        motion: 'moveToTopLine',\n        motionArgs: { linewise: true, toJumplist: true }},\n    { keys: ['M'], type: 'motion',\n        motion: 'moveToMiddleLine',\n        motionArgs: { linewise: true, toJumplist: true }},\n    { keys: ['L'], type: 'motion',\n        motion: 'moveToBottomLine',\n        motionArgs: { linewise: true, toJumplist: true }},\n    { keys: ['h'], type: 'motion',\n        motion: 'moveByCharacters',\n        motionArgs: { forward: false }},\n    { keys: ['l'], type: 'motion',\n        motion: 'moveByCharacters',\n        motionArgs: { forward: true }},\n    { keys: ['j'], type: 'motion',\n        motion: 'moveByLines',\n        motionArgs: { forward: true, linewise: true }},\n    { keys: ['k'], type: 'motion',\n        motion: 'moveByLines',\n        motionArgs: { forward: false, linewise: true }},\n    { keys: ['g','j'], type: 'motion',\n        motion: 'moveByDisplayLines',\n        motionArgs: { forward: true }},\n    { keys: ['g','k'], type: 'motion',\n        motion: 'moveByDisplayLines',\n        motionArgs: { forward: false }},\n    { keys: ['w'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: true, wordEnd: false }},\n    { keys: ['W'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: true, wordEnd: false, bigWord: true }},\n    { keys: ['e'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: true, wordEnd: true, inclusive: true }},\n    { keys: ['E'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: true, wordEnd: true, bigWord: true,\n            inclusive: true }},\n    { keys: ['b'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: false, wordEnd: false }},\n    { keys: ['B'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: false, wordEnd: false, bigWord: true }},\n    { keys: ['g', 'e'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: false, wordEnd: true, inclusive: true }},\n    { keys: ['g', 'E'], type: 'motion',\n        motion: 'moveByWords',\n        motionArgs: { forward: false, wordEnd: true, bigWord: true,\n            inclusive: true }},\n    { keys: ['{'], type: 'motion', motion: 'moveByParagraph',\n        motionArgs: { forward: false, toJumplist: true }},\n    { keys: ['}'], type: 'motion', motion: 'moveByParagraph',\n        motionArgs: { forward: true, toJumplist: true }},\n    { keys: ['<C-f>'], type: 'motion',\n        motion: 'moveByPage', motionArgs: { forward: true }},\n    { keys: ['<C-b>'], type: 'motion',\n        motion: 'moveByPage', motionArgs: { forward: false }},\n    { keys: ['<C-d>'], type: 'motion',\n        motion: 'moveByScroll',\n        motionArgs: { forward: true, explicitRepeat: true }},\n    { keys: ['<C-u>'], type: 'motion',\n        motion: 'moveByScroll',\n        motionArgs: { forward: false, explicitRepeat: true }},\n    { keys: ['g', 'g'], type: 'motion',\n        motion: 'moveToLineOrEdgeOfDocument',\n        motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: ['G'], type: 'motion',\n        motion: 'moveToLineOrEdgeOfDocument',\n        motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: ['0'], type: 'motion', motion: 'moveToStartOfLine' },\n    { keys: ['^'], type: 'motion',\n        motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: ['+'], type: 'motion',\n        motion: 'moveByLines',\n        motionArgs: { forward: true, toFirstChar:true }},\n    { keys: ['-'], type: 'motion',\n        motion: 'moveByLines',\n        motionArgs: { forward: false, toFirstChar:true }},\n    { keys: ['_'], type: 'motion',\n        motion: 'moveByLines',\n        motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }},\n    { keys: ['$'], type: 'motion',\n        motion: 'moveToEol',\n        motionArgs: { inclusive: true }},\n    { keys: ['%'], type: 'motion',\n        motion: 'moveToMatchedSymbol',\n        motionArgs: { inclusive: true, toJumplist: true }},\n    { keys: ['f', 'character'], type: 'motion',\n        motion: 'moveToCharacter',\n        motionArgs: { forward: true , inclusive: true }},\n    { keys: ['F', 'character'], type: 'motion',\n        motion: 'moveToCharacter',\n        motionArgs: { forward: false }},\n    { keys: ['t', 'character'], type: 'motion',\n        motion: 'moveTillCharacter',\n        motionArgs: { forward: true, inclusive: true }},\n    { keys: ['T', 'character'], type: 'motion',\n        motion: 'moveTillCharacter',\n        motionArgs: { forward: false }},\n    { keys: [';'], type: 'motion', motion: 'repeatLastCharacterSearch',\n        motionArgs: { forward: true }},\n    { keys: [','], type: 'motion', motion: 'repeatLastCharacterSearch',\n        motionArgs: { forward: false }},\n    { keys: ['\\'', 'character'], type: 'motion', motion: 'goToMark',\n        motionArgs: {toJumplist: true, linewise: true}},\n    { keys: ['`', 'character'], type: 'motion', motion: 'goToMark',\n        motionArgs: {toJumplist: true}},\n    { keys: [']', '`'], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n    { keys: ['[', '`'], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n    { keys: [']', '\\''], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n    { keys: ['[', '\\''], type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n    // the next two aren't motions but must come before more general motion declarations\n    { keys: [']', 'p'], type: 'action', action: 'paste', isEdit: true,\n        actionArgs: { after: true, isEdit: true, matchIndent: true}},\n    { keys: ['[', 'p'], type: 'action', action: 'paste', isEdit: true,\n        actionArgs: { after: false, isEdit: true, matchIndent: true}},\n    { keys: [']', 'character'], type: 'motion',\n        motion: 'moveToSymbol',\n        motionArgs: { forward: true, toJumplist: true}},\n    { keys: ['[', 'character'], type: 'motion',\n        motion: 'moveToSymbol',\n        motionArgs: { forward: false, toJumplist: true}},\n    { keys: ['|'], type: 'motion',\n        motion: 'moveToColumn',\n        motionArgs: { }},\n    { keys: ['o'], type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: { },context:'visual'},\n    // Operators\n    { keys: ['d'], type: 'operator', operator: 'delete' },\n    { keys: ['y'], type: 'operator', operator: 'yank' },\n    { keys: ['c'], type: 'operator', operator: 'change' },\n    { keys: ['>'], type: 'operator', operator: 'indent',\n        operatorArgs: { indentRight: true }},\n    { keys: ['<'], type: 'operator', operator: 'indent',\n        operatorArgs: { indentRight: false }},\n    { keys: ['g', '~'], type: 'operator', operator: 'swapcase' },\n    { keys: ['n'], type: 'motion', motion: 'findNext',\n        motionArgs: { forward: true, toJumplist: true }},\n    { keys: ['N'], type: 'motion', motion: 'findNext',\n        motionArgs: { forward: false, toJumplist: true }},\n    // Operator-Motion dual commands\n    { keys: ['x'], type: 'operatorMotion', operator: 'delete',\n        motion: 'moveByCharacters', motionArgs: { forward: true },\n        operatorMotionArgs: { visualLine: false }},\n    { keys: ['X'], type: 'operatorMotion', operator: 'delete',\n        motion: 'moveByCharacters', motionArgs: { forward: false },\n        operatorMotionArgs: { visualLine: true }},\n    { keys: ['D'], type: 'operatorMotion', operator: 'delete',\n      motion: 'moveToEol', motionArgs: { inclusive: true },\n        operatorMotionArgs: { visualLine: true }},\n    { keys: ['Y'], type: 'operatorMotion', operator: 'yank',\n        motion: 'moveToEol', motionArgs: { inclusive: true },\n        operatorMotionArgs: { visualLine: true }},\n    { keys: ['C'], type: 'operatorMotion',\n        operator: 'change',\n        motion: 'moveToEol', motionArgs: { inclusive: true },\n        operatorMotionArgs: { visualLine: true }},\n    { keys: ['~'], type: 'operatorMotion',\n        operator: 'swapcase', operatorArgs: { shouldMoveCursor: true },\n        motion: 'moveByCharacters', motionArgs: { forward: true }},\n    // Actions\n    { keys: ['<C-i>'], type: 'action', action: 'jumpListWalk',\n        actionArgs: { forward: true }},\n    { keys: ['<C-o>'], type: 'action', action: 'jumpListWalk',\n        actionArgs: { forward: false }},\n    { keys: ['<C-e>'], type: 'action',\n        action: 'scroll',\n        actionArgs: { forward: true, linewise: true }},\n    { keys: ['<C-y>'], type: 'action',\n        action: 'scroll',\n        actionArgs: { forward: false, linewise: true }},\n    { keys: ['a'], type: 'action', action: 'enterInsertMode', isEdit: true,\n        actionArgs: { insertAt: 'charAfter' }},\n    { keys: ['A'], type: 'action', action: 'enterInsertMode', isEdit: true,\n        actionArgs: { insertAt: 'eol' }},\n    { keys: ['i'], type: 'action', action: 'enterInsertMode', isEdit: true,\n        actionArgs: { insertAt: 'inplace' }},\n    { keys: ['I'], type: 'action', action: 'enterInsertMode', isEdit: true,\n        actionArgs: { insertAt: 'firstNonBlank' }},\n    { keys: ['o'], type: 'action', action: 'newLineAndEnterInsertMode',\n        isEdit: true, interlaceInsertRepeat: true,\n        actionArgs: { after: true }},\n    { keys: ['O'], type: 'action', action: 'newLineAndEnterInsertMode',\n        isEdit: true, interlaceInsertRepeat: true,\n        actionArgs: { after: false }},\n    { keys: ['v'], type: 'action', action: 'toggleVisualMode' },\n    { keys: ['V'], type: 'action', action: 'toggleVisualMode',\n        actionArgs: { linewise: true }},\n    { keys: ['g', 'v'], type: 'action', action: 'reselectLastSelection' },\n    { keys: ['J'], type: 'action', action: 'joinLines', isEdit: true },\n    { keys: ['p'], type: 'action', action: 'paste', isEdit: true,\n        actionArgs: { after: true, isEdit: true }},\n    { keys: ['P'], type: 'action', action: 'paste', isEdit: true,\n        actionArgs: { after: false, isEdit: true }},\n    { keys: ['r', 'character'], type: 'action', action: 'replace', isEdit: true },\n    { keys: ['@', 'character'], type: 'action', action: 'replayMacro' },\n    { keys: ['q', 'character'], type: 'action', action: 'enterMacroRecordMode' },\n    // Handle Replace-mode as a special case of insert mode.\n    { keys: ['R'], type: 'action', action: 'enterInsertMode', isEdit: true,\n        actionArgs: { replace: true }},\n    { keys: ['u'], type: 'action', action: 'undo' },\n    { keys: ['u'], type: 'action', action: 'changeCase', actionArgs: {toLower: true}, context: 'visual', isEdit: true },\n    { keys: ['U'],type: 'action', action: 'changeCase', actionArgs: {toLower: false}, context: 'visual', isEdit: true },\n    { keys: ['<C-r>'], type: 'action', action: 'redo' },\n    { keys: ['m', 'character'], type: 'action', action: 'setMark' },\n    { keys: ['\"', 'character'], type: 'action', action: 'setRegister' },\n    { keys: ['z', 'z'], type: 'action', action: 'scrollToCursor',\n        actionArgs: { position: 'center' }},\n    { keys: ['z', '.'], type: 'action', action: 'scrollToCursor',\n        actionArgs: { position: 'center' },\n        motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: ['z', 't'], type: 'action', action: 'scrollToCursor',\n        actionArgs: { position: 'top' }},\n    { keys: ['z', '<CR>'], type: 'action', action: 'scrollToCursor',\n        actionArgs: { position: 'top' },\n        motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: ['z', '-'], type: 'action', action: 'scrollToCursor',\n        actionArgs: { position: 'bottom' }},\n    { keys: ['z', 'b'], type: 'action', action: 'scrollToCursor',\n        actionArgs: { position: 'bottom' },\n        motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: ['.'], type: 'action', action: 'repeatLastEdit' },\n    { keys: ['<C-a>'], type: 'action', action: 'incrementNumberToken',\n        isEdit: true,\n        actionArgs: {increase: true, backtrack: false}},\n    { keys: ['<C-x>'], type: 'action', action: 'incrementNumberToken',\n        isEdit: true,\n        actionArgs: {increase: false, backtrack: false}},\n    // Text object motions\n    { keys: ['a', 'character'], type: 'motion',\n        motion: 'textObjectManipulation' },\n    { keys: ['i', 'character'], type: 'motion',\n        motion: 'textObjectManipulation',\n        motionArgs: { textObjectInner: true }},\n    // Search\n    { keys: ['/'], type: 'search',\n        searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},\n    { keys: ['?'], type: 'search',\n        searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }},\n    { keys: ['*'], type: 'search',\n        searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: ['#'], type: 'search',\n        searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: ['g', '*'], type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: ['g', '#'], type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},\n    // Ex command\n    { keys: [':'], type: 'ex' }\n  ];\n\n  var Pos = CodeMirror.Pos;\n\n  var Vim = function() {\n    CodeMirror.defineOption('vimMode', false, function(cm, val) {\n      if (val) {\n        cm.setOption('keyMap', 'vim');\n        cm.setOption('disableInput', true);\n        CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n        cm.on('beforeSelectionChange', beforeSelectionChange);\n        cm.on('cursorActivity', onCursorActivity);\n        maybeInitVimState(cm);\n        CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n      } else if (cm.state.vim) {\n        cm.setOption('keyMap', 'default');\n        cm.setOption('disableInput', false);\n        cm.off('beforeSelectionChange', beforeSelectionChange);\n        cm.off('cursorActivity', onCursorActivity);\n        CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n        cm.state.vim = null;\n      }\n    });\n    function beforeSelectionChange(cm, obj) {\n      var vim = cm.state.vim;\n      if (vim.insertMode || vim.exMode) return;\n\n      var head = obj.ranges[0].head;\n      var anchor = obj.ranges[0].anchor;\n      if (head.ch && head.ch == cm.doc.getLine(head.line).length) {\n        var pos = Pos(head.line, head.ch - 1);\n        obj.update([{anchor: cursorEqual(head, anchor) ? pos : anchor,\n                     head: pos}]);\n      }\n    }\n    function getOnPasteFn(cm) {\n      var vim = cm.state.vim;\n      if (!vim.onPasteFn) {\n        vim.onPasteFn = function() {\n          if (!vim.insertMode) {\n            cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n            actions.enterInsertMode(cm, {}, vim);\n          }\n        };\n      }\n      return vim.onPasteFn;\n    }\n\n    var numberRegex = /[\\d]/;\n    var wordRegexp = [(/\\w/), (/[^\\w\\s]/)], bigWordRegexp = [(/\\S/)];\n    function makeKeyRange(start, size) {\n      var keys = [];\n      for (var i = start; i < start + size; i++) {\n        keys.push(String.fromCharCode(i));\n      }\n      return keys;\n    }\n    var upperCaseAlphabet = makeKeyRange(65, 26);\n    var lowerCaseAlphabet = makeKeyRange(97, 26);\n    var numbers = makeKeyRange(48, 10);\n    var specialSymbols = '~`!@#$%^&*()_-+=[{}]\\\\|/?.,<>:;\"\\''.split('');\n    var specialKeys = ['Left', 'Right', 'Up', 'Down', 'Space', 'Backspace',\n        'Esc', 'Home', 'End', 'PageUp', 'PageDown', 'Enter'];\n    var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);\n    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '\"', '.', ':']);\n\n    function isLine(cm, line) {\n      return line >= cm.firstLine() && line <= cm.lastLine();\n    }\n    function isLowerCase(k) {\n      return (/^[a-z]$/).test(k);\n    }\n    function isMatchableSymbol(k) {\n      return '()[]{}'.indexOf(k) != -1;\n    }\n    function isNumber(k) {\n      return numberRegex.test(k);\n    }\n    function isUpperCase(k) {\n      return (/^[A-Z]$/).test(k);\n    }\n    function isWhiteSpaceString(k) {\n      return (/^\\s*$/).test(k);\n    }\n    function inArray(val, arr) {\n      for (var i = 0; i < arr.length; i++) {\n        if (arr[i] == val) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    var options = {};\n    function defineOption(name, defaultValue, type) {\n      if (defaultValue === undefined) { throw Error('defaultValue is required'); }\n      if (!type) { type = 'string'; }\n      options[name] = {\n        type: type,\n        defaultValue: defaultValue\n      };\n      setOption(name, defaultValue);\n    }\n\n    function setOption(name, value) {\n      var option = options[name];\n      if (!option) {\n        throw Error('Unknown option: ' + name);\n      }\n      if (option.type == 'boolean') {\n        if (value && value !== true) {\n          throw Error('Invalid argument: ' + name + '=' + value);\n        } else if (value !== false) {\n          // Boolean options are set to true if value is not defined.\n          value = true;\n        }\n      }\n      option.value = option.type == 'boolean' ? !!value : value;\n    }\n\n    function getOption(name) {\n      var option = options[name];\n      if (!option) {\n        throw Error('Unknown option: ' + name);\n      }\n      return option.value;\n    }\n\n    var createCircularJumpList = function() {\n      var size = 100;\n      var pointer = -1;\n      var head = 0;\n      var tail = 0;\n      var buffer = new Array(size);\n      function add(cm, oldCur, newCur) {\n        var current = pointer % size;\n        var curMark = buffer[current];\n        function useNextSlot(cursor) {\n          var next = ++pointer % size;\n          var trashMark = buffer[next];\n          if (trashMark) {\n            trashMark.clear();\n          }\n          buffer[next] = cm.setBookmark(cursor);\n        }\n        if (curMark) {\n          var markPos = curMark.find();\n          // avoid recording redundant cursor position\n          if (markPos && !cursorEqual(markPos, oldCur)) {\n            useNextSlot(oldCur);\n          }\n        } else {\n          useNextSlot(oldCur);\n        }\n        useNextSlot(newCur);\n        head = pointer;\n        tail = pointer - size + 1;\n        if (tail < 0) {\n          tail = 0;\n        }\n      }\n      function move(cm, offset) {\n        pointer += offset;\n        if (pointer > head) {\n          pointer = head;\n        } else if (pointer < tail) {\n          pointer = tail;\n        }\n        var mark = buffer[(size + pointer) % size];\n        // skip marks that are temporarily removed from text buffer\n        if (mark && !mark.find()) {\n          var inc = offset > 0 ? 1 : -1;\n          var newCur;\n          var oldCur = cm.getCursor();\n          do {\n            pointer += inc;\n            mark = buffer[(size + pointer) % size];\n            // skip marks that are the same as current position\n            if (mark &&\n                (newCur = mark.find()) &&\n                !cursorEqual(oldCur, newCur)) {\n              break;\n            }\n          } while (pointer < head && pointer > tail);\n        }\n        return mark;\n      }\n      return {\n        cachedCursor: undefined, //used for # and * jumps\n        add: add,\n        move: move\n      };\n    };\n\n    // Returns an object to track the changes associated insert mode.  It\n    // clones the object that is passed in, or creates an empty object one if\n    // none is provided.\n    var createInsertModeChanges = function(c) {\n      if (c) {\n        // Copy construction\n        return {\n          changes: c.changes,\n          expectCursorActivityForChange: c.expectCursorActivityForChange\n        };\n      }\n      return {\n        // Change list\n        changes: [],\n        // Set to true on change, false on cursorActivity.\n        expectCursorActivityForChange: false\n      };\n    };\n\n    function MacroModeState() {\n      this.latestRegister = undefined;\n      this.isPlaying = false;\n      this.isRecording = false;\n      this.replaySearchQueries = [];\n      this.onRecordingDone = undefined;\n      this.lastInsertModeChanges = createInsertModeChanges();\n    }\n    MacroModeState.prototype = {\n      exitMacroRecordMode: function() {\n        var macroModeState = vimGlobalState.macroModeState;\n        macroModeState.onRecordingDone(); // close dialog\n        macroModeState.onRecordingDone = undefined;\n        macroModeState.isRecording = false;\n      },\n      enterMacroRecordMode: function(cm, registerName) {\n        var register =\n            vimGlobalState.registerController.getRegister(registerName);\n        if (register) {\n          register.clear();\n          this.latestRegister = registerName;\n          this.onRecordingDone = cm.openDialog(\n              '(recording)['+registerName+']', null, {bottom:true});\n          this.isRecording = true;\n        }\n      }\n    };\n\n    function maybeInitVimState(cm) {\n      if (!cm.state.vim) {\n        // Store instance state in the CodeMirror object.\n        cm.state.vim = {\n          inputState: new InputState(),\n          // Vim's input state that triggered the last edit, used to repeat\n          // motions and operators with '.'.\n          lastEditInputState: undefined,\n          // Vim's action command before the last edit, used to repeat actions\n          // with '.' and insert mode repeat.\n          lastEditActionCommand: undefined,\n          // When using jk for navigation, if you move from a longer line to a\n          // shorter line, the cursor may clip to the end of the shorter line.\n          // If j is pressed again and cursor goes to the next line, the\n          // cursor should go back to its horizontal position on the longer\n          // line if it can. This is to keep track of the horizontal position.\n          lastHPos: -1,\n          // Doing the same with screen-position for gj/gk\n          lastHSPos: -1,\n          // The last motion command run. Cleared if a non-motion command gets\n          // executed in between.\n          lastMotion: null,\n          marks: {},\n          insertMode: false,\n          // Repeat count for changes made in insert mode, triggered by key\n          // sequences like 3,i. Only exists when insertMode is true.\n          insertModeRepeat: undefined,\n          visualMode: false,\n          // If we are in visual line mode. No effect if visualMode is false.\n          visualLine: false,\n          lastSelection: null\n        };\n      }\n      return cm.state.vim;\n    }\n    var vimGlobalState;\n    function resetVimGlobalState() {\n      vimGlobalState = {\n        // The current search query.\n        searchQuery: null,\n        // Whether we are searching backwards.\n        searchIsReversed: false,\n        // Replace part of the last substituted pattern\n        lastSubstituteReplacePart: undefined,\n        jumpList: createCircularJumpList(),\n        macroModeState: new MacroModeState,\n        // Recording latest f, t, F or T motion command.\n        lastChararacterSearch: {increment:0, forward:true, selectedCharacter:''},\n        registerController: new RegisterController({})\n      };\n      for (var optionName in options) {\n        var option = options[optionName];\n        option.value = option.defaultValue;\n      }\n    }\n\n    var vimApi= {\n      buildKeyMap: function() {\n        // TODO: Convert keymap into dictionary format for fast lookup.\n      },\n      // Testing hook, though it might be useful to expose the register\n      // controller anyways.\n      getRegisterController: function() {\n        return vimGlobalState.registerController;\n      },\n      // Testing hook.\n      resetVimGlobalState_: resetVimGlobalState,\n\n      // Testing hook.\n      getVimGlobalState_: function() {\n        return vimGlobalState;\n      },\n\n      // Testing hook.\n      maybeInitVimState_: maybeInitVimState,\n\n      InsertModeKey: InsertModeKey,\n      map: function(lhs, rhs, ctx) {\n        // Add user defined key bindings.\n        exCommandDispatcher.map(lhs, rhs, ctx);\n      },\n      setOption: setOption,\n      getOption: getOption,\n      defineOption: defineOption,\n      defineEx: function(name, prefix, func){\n        if (name.indexOf(prefix) !== 0) {\n          throw new Error('(Vim.defineEx) \"'+prefix+'\" is not a prefix of \"'+name+'\", command not registered');\n        }\n        exCommands[name]=func;\n        exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'};\n      },\n      // This is the outermost function called by CodeMirror, after keys have\n      // been mapped to their Vim equivalents.\n      handleKey: function(cm, key) {\n        var command;\n        var vim = maybeInitVimState(cm);\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isRecording) {\n          if (key == 'q') {\n            macroModeState.exitMacroRecordMode();\n            vim.inputState = new InputState();\n            return;\n          }\n        }\n        if (key == '<Esc>') {\n          // Clear input state and get back to normal mode.\n          vim.inputState = new InputState();\n          if (vim.visualMode) {\n            exitVisualMode(cm);\n          }\n          return;\n        }\n        // Enter visual mode when the mouse selects text.\n        if (!vim.visualMode &&\n            !cursorEqual(cm.getCursor('head'), cm.getCursor('anchor'))) {\n          vim.visualMode = true;\n          vim.visualLine = false;\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\"});\n          cm.on('mousedown', exitVisualMode);\n        }\n        if (key != '0' || (key == '0' && vim.inputState.getRepeat() === 0)) {\n          // Have to special case 0 since it's both a motion and a number.\n          command = commandDispatcher.matchCommand(key, defaultKeymap, vim);\n        }\n        if (!command) {\n          if (isNumber(key)) {\n            // Increment count unless count is 0 and key is 0.\n            vim.inputState.pushRepeatDigit(key);\n          }\n          if (macroModeState.isRecording) {\n            logKey(macroModeState, key);\n          }\n          return;\n        }\n        if (command.type == 'keyToKey') {\n          // TODO: prevent infinite recursion.\n          for (var i = 0; i < command.toKeys.length; i++) {\n            this.handleKey(cm, command.toKeys[i]);\n          }\n        } else {\n          if (macroModeState.isRecording) {\n            logKey(macroModeState, key);\n          }\n          commandDispatcher.processCommand(cm, vim, command);\n        }\n      },\n      handleEx: function(cm, input) {\n        exCommandDispatcher.processCommand(cm, input);\n      }\n    };\n\n    // Represents the current input state.\n    function InputState() {\n      this.prefixRepeat = [];\n      this.motionRepeat = [];\n\n      this.operator = null;\n      this.operatorArgs = null;\n      this.motion = null;\n      this.motionArgs = null;\n      this.keyBuffer = []; // For matching multi-key commands.\n      this.registerName = null; // Defaults to the unnamed register.\n    }\n    InputState.prototype.pushRepeatDigit = function(n) {\n      if (!this.operator) {\n        this.prefixRepeat = this.prefixRepeat.concat(n);\n      } else {\n        this.motionRepeat = this.motionRepeat.concat(n);\n      }\n    };\n    InputState.prototype.getRepeat = function() {\n      var repeat = 0;\n      if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n        repeat = 1;\n        if (this.prefixRepeat.length > 0) {\n          repeat *= parseInt(this.prefixRepeat.join(''), 10);\n        }\n        if (this.motionRepeat.length > 0) {\n          repeat *= parseInt(this.motionRepeat.join(''), 10);\n        }\n      }\n      return repeat;\n    };\n\n    /*\n     * Register stores information about copy and paste registers.  Besides\n     * text, a register must store whether it is linewise (i.e., when it is\n     * pasted, should it insert itself into a new line, or should the text be\n     * inserted at the cursor position.)\n     */\n    function Register(text, linewise) {\n      this.clear();\n      this.keyBuffer = [text || ''];\n      this.insertModeChanges = [];\n      this.searchQueries = [];\n      this.linewise = !!linewise;\n    }\n    Register.prototype = {\n      setText: function(text, linewise) {\n        this.keyBuffer = [text || ''];\n        this.linewise = !!linewise;\n      },\n      pushText: function(text, linewise) {\n        // if this register has ever been set to linewise, use linewise.\n        if (linewise) {\n          if (!this.linewise) {\n            this.keyBuffer.push('\\n');\n          }\n          this.linewise = true;\n        }\n        this.keyBuffer.push(text);\n      },\n      pushInsertModeChanges: function(changes) {\n        this.insertModeChanges.push(createInsertModeChanges(changes));\n      },\n      pushSearchQuery: function(query) {\n        this.searchQueries.push(query);\n      },\n      clear: function() {\n        this.keyBuffer = [];\n        this.insertModeChanges = [];\n        this.searchQueries = [];\n        this.linewise = false;\n      },\n      toString: function() {\n        return this.keyBuffer.join('');\n      }\n    };\n\n    /*\n     * vim registers allow you to keep many independent copy and paste buffers.\n     * See http://usevim.com/2012/04/13/registers/ for an introduction.\n     *\n     * RegisterController keeps the state of all the registers.  An initial\n     * state may be passed in.  The unnamed register '\"' will always be\n     * overridden.\n     */\n    function RegisterController(registers) {\n      this.registers = registers;\n      this.unnamedRegister = registers['\"'] = new Register();\n      registers['.'] = new Register();\n      registers[':'] = new Register();\n    }\n    RegisterController.prototype = {\n      pushText: function(registerName, operator, text, linewise) {\n        if (linewise && text.charAt(0) == '\\n') {\n          text = text.slice(1) + '\\n';\n        }\n        if (linewise && text.charAt(text.length - 1) !== '\\n'){\n          text += '\\n';\n        }\n        // Lowercase and uppercase registers refer to the same register.\n        // Uppercase just means append.\n        var register = this.isValidRegister(registerName) ?\n            this.getRegister(registerName) : null;\n        // if no register/an invalid register was specified, things go to the\n        // default registers\n        if (!register) {\n          switch (operator) {\n            case 'yank':\n              // The 0 register contains the text from the most recent yank.\n              this.registers['0'] = new Register(text, linewise);\n              break;\n            case 'delete':\n            case 'change':\n              if (text.indexOf('\\n') == -1) {\n                // Delete less than 1 line. Update the small delete register.\n                this.registers['-'] = new Register(text, linewise);\n              } else {\n                // Shift down the contents of the numbered registers and put the\n                // deleted text into register 1.\n                this.shiftNumericRegisters_();\n                this.registers['1'] = new Register(text, linewise);\n              }\n              break;\n          }\n          // Make sure the unnamed register is set to what just happened\n          this.unnamedRegister.setText(text, linewise);\n          return;\n        }\n\n        // If we've gotten to this point, we've actually specified a register\n        var append = isUpperCase(registerName);\n        if (append) {\n          register.pushText(text, linewise);\n        } else {\n          register.setText(text, linewise);\n        }\n        // The unnamed register always has the same value as the last used\n        // register.\n        this.unnamedRegister.setText(register.toString(), linewise);\n      },\n      // Gets the register named @name.  If one of @name doesn't already exist,\n      // create it.  If @name is invalid, return the unnamedRegister.\n      getRegister: function(name) {\n        if (!this.isValidRegister(name)) {\n          return this.unnamedRegister;\n        }\n        name = name.toLowerCase();\n        if (!this.registers[name]) {\n          this.registers[name] = new Register();\n        }\n        return this.registers[name];\n      },\n      isValidRegister: function(name) {\n        return name && inArray(name, validRegisters);\n      },\n      shiftNumericRegisters_: function() {\n        for (var i = 9; i >= 2; i--) {\n          this.registers[i] = this.getRegister('' + (i - 1));\n        }\n      }\n    };\n\n    var commandDispatcher = {\n      matchCommand: function(key, keyMap, vim) {\n        var inputState = vim.inputState;\n        var keys = inputState.keyBuffer.concat(key);\n        var matchedCommands = [];\n        var selectedCharacter;\n        for (var i = 0; i < keyMap.length; i++) {\n          var command = keyMap[i];\n          if (matchKeysPartial(keys, command.keys)) {\n            if (inputState.operator && command.type == 'action') {\n              // Ignore matched action commands after an operator. Operators\n              // only operate on motions. This check is really for text\n              // objects since aW, a[ etcs conflicts with a.\n              continue;\n            }\n            // Match commands that take <character> as an argument.\n            if (command.keys[keys.length - 1] == 'character') {\n              selectedCharacter = keys[keys.length - 1];\n              if (selectedCharacter.length>1){\n                switch(selectedCharacter){\n                  case '<CR>':\n                    selectedCharacter='\\n';\n                    break;\n                  case '<Space>':\n                    selectedCharacter=' ';\n                    break;\n                  default:\n                    continue;\n                }\n              }\n            }\n            // Add the command to the list of matched commands. Choose the best\n            // command later.\n            matchedCommands.push(command);\n          }\n        }\n\n        // Returns the command if it is a full match, or null if not.\n        function getFullyMatchedCommandOrNull(command) {\n          if (keys.length < command.keys.length) {\n            // Matches part of a multi-key command. Buffer and wait for next\n            // stroke.\n            inputState.keyBuffer.push(key);\n            return null;\n          } else {\n            if (command.keys[keys.length - 1] == 'character') {\n              inputState.selectedCharacter = selectedCharacter;\n            }\n            // Clear the buffer since a full match was found.\n            inputState.keyBuffer = [];\n            return command;\n          }\n        }\n\n        if (!matchedCommands.length) {\n          // Clear the buffer since there were no matches.\n          inputState.keyBuffer = [];\n          return null;\n        } else if (matchedCommands.length == 1) {\n          return getFullyMatchedCommandOrNull(matchedCommands[0]);\n        } else {\n          // Find the best match in the list of matchedCommands.\n          var context = vim.visualMode ? 'visual' : 'normal';\n          var bestMatch; // Default to first in the list.\n          for (var i = 0; i < matchedCommands.length; i++) {\n            var current = matchedCommands[i];\n            if (current.context == context) {\n              bestMatch = current;\n              break;\n            } else if (!bestMatch && !current.context) {\n              // Only set an imperfect match to best match if no best match is\n              // set and the imperfect match is not restricted to another\n              // context.\n              bestMatch = current;\n            }\n          }\n          return getFullyMatchedCommandOrNull(bestMatch);\n        }\n      },\n      processCommand: function(cm, vim, command) {\n        vim.inputState.repeatOverride = command.repeatOverride;\n        switch (command.type) {\n          case 'motion':\n            this.processMotion(cm, vim, command);\n            break;\n          case 'operator':\n            this.processOperator(cm, vim, command);\n            break;\n          case 'operatorMotion':\n            this.processOperatorMotion(cm, vim, command);\n            break;\n          case 'action':\n            this.processAction(cm, vim, command);\n            break;\n          case 'search':\n            this.processSearch(cm, vim, command);\n            break;\n          case 'ex':\n          case 'keyToEx':\n            this.processEx(cm, vim, command);\n            break;\n          default:\n            break;\n        }\n      },\n      processMotion: function(cm, vim, command) {\n        vim.inputState.motion = command.motion;\n        vim.inputState.motionArgs = copyArgs(command.motionArgs);\n        this.evalInput(cm, vim);\n      },\n      processOperator: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        if (inputState.operator) {\n          if (inputState.operator == command.operator) {\n            // Typing an operator twice like 'dd' makes the operator operate\n            // linewise\n            inputState.motion = 'expandToLine';\n            inputState.motionArgs = { linewise: true };\n            this.evalInput(cm, vim);\n            return;\n          } else {\n            // 2 different operators in a row doesn't make sense.\n            vim.inputState = new InputState();\n          }\n        }\n        inputState.operator = command.operator;\n        inputState.operatorArgs = copyArgs(command.operatorArgs);\n        if (vim.visualMode) {\n          // Operating on a selection in visual mode. We don't need a motion.\n          this.evalInput(cm, vim);\n        }\n      },\n      processOperatorMotion: function(cm, vim, command) {\n        var visualMode = vim.visualMode;\n        var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n        if (operatorMotionArgs) {\n          // Operator motions may have special behavior in visual mode.\n          if (visualMode && operatorMotionArgs.visualLine) {\n            vim.visualLine = true;\n          }\n        }\n        this.processOperator(cm, vim, command);\n        if (!visualMode) {\n          this.processMotion(cm, vim, command);\n        }\n      },\n      processAction: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        var repeat = inputState.getRepeat();\n        var repeatIsExplicit = !!repeat;\n        var actionArgs = copyArgs(command.actionArgs) || {};\n        if (inputState.selectedCharacter) {\n          actionArgs.selectedCharacter = inputState.selectedCharacter;\n        }\n        // Actions may or may not have motions and operators. Do these first.\n        if (command.operator) {\n          this.processOperator(cm, vim, command);\n        }\n        if (command.motion) {\n          this.processMotion(cm, vim, command);\n        }\n        if (command.motion || command.operator) {\n          this.evalInput(cm, vim);\n        }\n        actionArgs.repeat = repeat || 1;\n        actionArgs.repeatIsExplicit = repeatIsExplicit;\n        actionArgs.registerName = inputState.registerName;\n        vim.inputState = new InputState();\n        vim.lastMotion = null;\n        if (command.isEdit) {\n          this.recordLastEdit(vim, inputState, command);\n        }\n        actions[command.action](cm, actionArgs, vim);\n      },\n      processSearch: function(cm, vim, command) {\n        if (!cm.getSearchCursor) {\n          // Search depends on SearchCursor.\n          return;\n        }\n        var forward = command.searchArgs.forward;\n        var wholeWordOnly = command.searchArgs.wholeWordOnly;\n        getSearchState(cm).setReversed(!forward);\n        var promptPrefix = (forward) ? '/' : '?';\n        var originalQuery = getSearchState(cm).getQuery();\n        var originalScrollPos = cm.getScrollInfo();\n        function handleQuery(query, ignoreCase, smartCase) {\n          try {\n            updateSearchQuery(cm, query, ignoreCase, smartCase);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + query);\n            return;\n          }\n          commandDispatcher.processMotion(cm, vim, {\n            type: 'motion',\n            motion: 'findNext',\n            motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n          });\n        }\n        function onPromptClose(query) {\n          cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            logSearchQuery(macroModeState, query);\n          }\n        }\n        function onPromptKeyUp(_e, query) {\n          var parsedQuery;\n          try {\n            parsedQuery = updateSearchQuery(cm, query,\n                true /** ignoreCase */, true /** smartCase */);\n          } catch (e) {\n            // Swallow bad regexes for incremental search.\n          }\n          if (parsedQuery) {\n            cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n          } else {\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          }\n        }\n        function onPromptKeyDown(e, _query, close) {\n          var keyName = CodeMirror.keyName(e);\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') {\n            updateSearchQuery(cm, originalQuery);\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n\n            CodeMirror.e_stop(e);\n            close();\n            cm.focus();\n          }\n        }\n        switch (command.searchArgs.querySrc) {\n          case 'prompt':\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isPlaying) {\n              var query = macroModeState.replaySearchQueries.shift();\n              handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            } else {\n              showPrompt(cm, {\n                  onClose: onPromptClose,\n                  prefix: promptPrefix,\n                  desc: searchPromptDesc,\n                  onKeyUp: onPromptKeyUp,\n                  onKeyDown: onPromptKeyDown\n              });\n            }\n            break;\n          case 'wordUnderCursor':\n            var word = expandWordUnderCursor(cm, false /** inclusive */,\n                true /** forward */, false /** bigWord */,\n                true /** noSymbol */);\n            var isKeyword = true;\n            if (!word) {\n              word = expandWordUnderCursor(cm, false /** inclusive */,\n                  true /** forward */, false /** bigWord */,\n                  false /** noSymbol */);\n              isKeyword = false;\n            }\n            if (!word) {\n              return;\n            }\n            var query = cm.getLine(word.start.line).substring(word.start.ch,\n                word.end.ch);\n            if (isKeyword && wholeWordOnly) {\n                query = '\\\\b' + query + '\\\\b';\n            } else {\n              query = escapeRegex(query);\n            }\n\n            // cachedCursor is used to save the old position of the cursor\n            // when * or # causes vim to seek for the nearest word and shift\n            // the cursor before entering the motion.\n            vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n            cm.setCursor(word.start);\n\n            handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            break;\n        }\n      },\n      processEx: function(cm, vim, command) {\n        function onPromptClose(input) {\n          // Give the prompt some time to close so that if processCommand shows\n          // an error, the elements don't overlap.\n          exCommandDispatcher.processCommand(cm, input);\n        }\n        function onPromptKeyDown(e, _input, close) {\n          var keyName = CodeMirror.keyName(e);\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') {\n            CodeMirror.e_stop(e);\n            close();\n            cm.focus();\n          }\n        }\n        if (command.type == 'keyToEx') {\n          // Handle user defined Ex to Ex mappings\n          exCommandDispatcher.processCommand(cm, command.exArgs.input);\n        } else {\n          if (vim.visualMode) {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n                onKeyDown: onPromptKeyDown});\n          } else {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n                onKeyDown: onPromptKeyDown});\n          }\n        }\n      },\n      evalInput: function(cm, vim) {\n        // If the motion comand is set, execute both the operator and motion.\n        // Otherwise return.\n        var inputState = vim.inputState;\n        var motion = inputState.motion;\n        var motionArgs = inputState.motionArgs || {};\n        var operator = inputState.operator;\n        var operatorArgs = inputState.operatorArgs || {};\n        var registerName = inputState.registerName;\n        var selectionEnd = copyCursor(cm.getCursor('head'));\n        var selectionStart = copyCursor(cm.getCursor('anchor'));\n        // The difference between cur and selection cursors are that cur is\n        // being operated on and ignores that there is a selection.\n        var curStart = copyCursor(selectionEnd);\n        var curOriginal = copyCursor(curStart);\n        var curEnd;\n        var repeat;\n        if (operator) {\n          this.recordLastEdit(vim, inputState);\n        }\n        if (inputState.repeatOverride !== undefined) {\n          // If repeatOverride is specified, that takes precedence over the\n          // input state's repeat. Used by Ex mode and can be user defined.\n          repeat = inputState.repeatOverride;\n        } else {\n          repeat = inputState.getRepeat();\n        }\n        if (repeat > 0 && motionArgs.explicitRepeat) {\n          motionArgs.repeatIsExplicit = true;\n        } else if (motionArgs.noRepeat ||\n            (!motionArgs.explicitRepeat && repeat === 0)) {\n          repeat = 1;\n          motionArgs.repeatIsExplicit = false;\n        }\n        if (inputState.selectedCharacter) {\n          // If there is a character input, stick it in all of the arg arrays.\n          motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n              inputState.selectedCharacter;\n        }\n        motionArgs.repeat = repeat;\n        vim.inputState = new InputState();\n        if (motion) {\n          var motionResult = motions[motion](cm, motionArgs, vim);\n          vim.lastMotion = motions[motion];\n          if (!motionResult) {\n            return;\n          }\n          if (motionArgs.toJumplist) {\n            var jumpList = vimGlobalState.jumpList;\n            // if the current motion is # or *, use cachedCursor\n            var cachedCursor = jumpList.cachedCursor;\n            if (cachedCursor) {\n              recordJumpPosition(cm, cachedCursor, motionResult);\n              delete jumpList.cachedCursor;\n            } else {\n              recordJumpPosition(cm, curOriginal, motionResult);\n            }\n          }\n          if (motionResult instanceof Array) {\n            curStart = motionResult[0];\n            curEnd = motionResult[1];\n          } else {\n            curEnd = motionResult;\n          }\n          // TODO: Handle null returns from motion commands better.\n          if (!curEnd) {\n            curEnd = Pos(curStart.line, curStart.ch);\n          }\n          if (vim.visualMode) {\n            // Check if the selection crossed over itself. Will need to shift\n            // the start point if that happened.\n            if (cursorIsBefore(selectionStart, selectionEnd) &&\n                (cursorEqual(selectionStart, curEnd) ||\n                    cursorIsBefore(curEnd, selectionStart))) {\n              // The end of the selection has moved from after the start to\n              // before the start. We will shift the start right by 1.\n              selectionStart.ch += 1;\n            } else if (cursorIsBefore(selectionEnd, selectionStart) &&\n                (cursorEqual(selectionStart, curEnd) ||\n                    cursorIsBefore(selectionStart, curEnd))) {\n              // The opposite happened. We will shift the start left by 1.\n              selectionStart.ch -= 1;\n            }\n            selectionEnd = curEnd;\n            selectionStart = (motionResult instanceof Array) ? curStart : selectionStart;\n            if (vim.visualLine) {\n              if (cursorIsBefore(selectionStart, selectionEnd)) {\n                selectionStart.ch = 0;\n\n                var lastLine = cm.lastLine();\n                if (selectionEnd.line > lastLine) {\n                  selectionEnd.line = lastLine;\n                }\n                selectionEnd.ch = lineLength(cm, selectionEnd.line);\n              } else {\n                selectionEnd.ch = 0;\n                selectionStart.ch = lineLength(cm, selectionStart.line);\n              }\n            }\n            cm.setSelection(selectionStart, selectionEnd);\n            updateMark(cm, vim, '<',\n                cursorIsBefore(selectionStart, selectionEnd) ? selectionStart\n                    : selectionEnd);\n            updateMark(cm, vim, '>',\n                cursorIsBefore(selectionStart, selectionEnd) ? selectionEnd\n                    : selectionStart);\n          } else if (!operator) {\n            curEnd = clipCursorToContent(cm, curEnd);\n            cm.setCursor(curEnd.line, curEnd.ch);\n          }\n        }\n\n        if (operator) {\n          var inverted = false;\n          vim.lastMotion = null;\n          operatorArgs.repeat = repeat; // Indent in visual mode needs this.\n          if (vim.visualMode) {\n            curStart = selectionStart;\n            curEnd = selectionEnd;\n            motionArgs.inclusive = true;\n          }\n          // Swap start and end if motion was backward.\n          if (curEnd && cursorIsBefore(curEnd, curStart)) {\n            var tmp = curStart;\n            curStart = curEnd;\n            curEnd = tmp;\n            inverted = true;\n          } else if (!curEnd) {\n            curEnd = copyCursor(curStart);\n          }\n          if (motionArgs.inclusive && !(vim.visualMode && inverted)) {\n            // Move the selection end one to the right to include the last\n            // character.\n            curEnd.ch++;\n          }\n          if (operatorArgs.selOffset) {\n            // Replaying a visual mode operation\n            curEnd.line = curStart.line + operatorArgs.selOffset.line;\n            if (operatorArgs.selOffset.line) {curEnd.ch = operatorArgs.selOffset.ch; }\n            else { curEnd.ch = curStart.ch + operatorArgs.selOffset.ch; }\n          } else if (vim.visualMode) {\n            var selOffset = Pos();\n            selOffset.line = curEnd.line - curStart.line;\n            if (selOffset.line) { selOffset.ch = curEnd.ch; }\n            else { selOffset.ch = curEnd.ch - curStart.ch; }\n            operatorArgs.selOffset = selOffset;\n          }\n          var linewise = motionArgs.linewise ||\n              (vim.visualMode && vim.visualLine) ||\n              operatorArgs.linewise;\n          if (linewise) {\n            // Expand selection to entire line.\n            expandSelectionToLine(cm, curStart, curEnd);\n          } else if (motionArgs.forward) {\n            // Clip to trailing newlines only if the motion goes forward.\n            clipToLine(cm, curStart, curEnd);\n          }\n          operatorArgs.registerName = registerName;\n          // Keep track of linewise as it affects how paste and change behave.\n          operatorArgs.linewise = linewise;\n          operators[operator](cm, operatorArgs, vim, curStart,\n              curEnd, curOriginal);\n          if (vim.visualMode) {\n            exitVisualMode(cm);\n          }\n        }\n      },\n      recordLastEdit: function(vim, inputState, actionCommand) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        vim.lastEditInputState = inputState;\n        vim.lastEditActionCommand = actionCommand;\n        macroModeState.lastInsertModeChanges.changes = [];\n        macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n      }\n    };\n\n    /**\n     * typedef {Object{line:number,ch:number}} Cursor An object containing the\n     *     position of the cursor.\n     */\n    // All of the functions below return Cursor objects.\n    var motions = {\n      moveToTopLine: function(cm, motionArgs) {\n        var line = getUserVisibleLines(cm).top + motionArgs.repeat -1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToMiddleLine: function(cm) {\n        var range = getUserVisibleLines(cm);\n        var line = Math.floor((range.top + range.bottom) * 0.5);\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToBottomLine: function(cm, motionArgs) {\n        var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      expandToLine: function(cm, motionArgs) {\n        // Expands forward to end of line, and then to next line if repeat is\n        // >1. Does not handle backward motion!\n        var cur = cm.getCursor();\n        return Pos(cur.line + motionArgs.repeat - 1, Infinity);\n      },\n      findNext: function(cm, motionArgs) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n          return;\n        }\n        var prev = !motionArgs.forward;\n        // If search is initiated with ? instead of /, negate direction.\n        prev = (state.isReversed()) ? !prev : prev;\n        highlightSearchMatches(cm, query);\n        return findNext(cm, prev/** prev */, query, motionArgs.repeat);\n      },\n      goToMark: function(cm, motionArgs, vim) {\n        var mark = vim.marks[motionArgs.selectedCharacter];\n        if (mark) {\n          var pos = mark.find();\n          return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n        }\n        return null;\n      },\n      moveToOtherHighlightedEnd: function(cm) {\n        var curEnd = copyCursor(cm.getCursor('head'));\n        var curStart = copyCursor(cm.getCursor('anchor'));\n        if (cursorIsBefore(curStart, curEnd)) {\n           curEnd.ch += 1;\n        } else if (cursorIsBefore(curEnd, curStart)) {\n           curStart.ch -= 1;\n        }\n        return ([curEnd,curStart]);\n      },\n      jumpToMark: function(cm, motionArgs, vim) {\n        var best = cm.getCursor();\n        for (var i = 0; i < motionArgs.repeat; i++) {\n          var cursor = best;\n          for (var key in vim.marks) {\n            if (!isLowerCase(key)) {\n              continue;\n            }\n            var mark = vim.marks[key].find();\n            var isWrongDirection = (motionArgs.forward) ?\n              cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n\n            if (isWrongDirection) {\n              continue;\n            }\n            if (motionArgs.linewise && (mark.line == cursor.line)) {\n              continue;\n            }\n\n            var equal = cursorEqual(cursor, best);\n            var between = (motionArgs.forward) ?\n              cusrorIsBetween(cursor, mark, best) :\n              cusrorIsBetween(best, mark, cursor);\n\n            if (equal || between) {\n              best = mark;\n            }\n          }\n        }\n\n        if (motionArgs.linewise) {\n          // Vim places the cursor on the first non-whitespace character of\n          // the line if there is one, else it places the cursor at the end\n          // of the line, regardless of whether a mark was found.\n          best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n        }\n        return best;\n      },\n      moveByCharacters: function(cm, motionArgs) {\n        var cur = cm.getCursor();\n        var repeat = motionArgs.repeat;\n        var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n        return Pos(cur.line, ch);\n      },\n      moveByLines: function(cm, motionArgs, vim) {\n        var cur = cm.getCursor();\n        var endCh = cur.ch;\n        // Depending what our last motion was, we may want to do different\n        // things. If our last motion was moving vertically, we want to\n        // preserve the HPos from our last horizontal move.  If our last motion\n        // was going to the end of a line, moving vertically we should go to\n        // the end of the line, etc.\n        switch (vim.lastMotion) {\n          case this.moveByLines:\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveToColumn:\n          case this.moveToEol:\n            endCh = vim.lastHPos;\n            break;\n          default:\n            vim.lastHPos = endCh;\n        }\n        var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0);\n        var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n        var first = cm.firstLine();\n        var last = cm.lastLine();\n        // Vim cancels linewise motions that start on an edge and move beyond\n        // that edge. It does not cancel motions that do not start on an edge.\n        if ((line < first && cur.line == first) ||\n            (line > last && cur.line == last)) {\n          return;\n        }\n        if (motionArgs.toFirstChar){\n          endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n          vim.lastHPos = endCh;\n        }\n        vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left;\n        return Pos(line, endCh);\n      },\n      moveByDisplayLines: function(cm, motionArgs, vim) {\n        var cur = cm.getCursor();\n        switch (vim.lastMotion) {\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveByLines:\n          case this.moveToColumn:\n          case this.moveToEol:\n            break;\n          default:\n            vim.lastHSPos = cm.charCoords(cur,'div').left;\n        }\n        var repeat = motionArgs.repeat;\n        var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos);\n        if (res.hitSide) {\n          if (motionArgs.forward) {\n            var lastCharCoords = cm.charCoords(res, 'div');\n            var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n            var res = cm.coordsChar(goalCoords, 'div');\n          } else {\n            var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div');\n            resCoords.left = vim.lastHSPos;\n            res = cm.coordsChar(resCoords, 'div');\n          }\n        }\n        vim.lastHPos = res.ch;\n        return res;\n      },\n      moveByPage: function(cm, motionArgs) {\n        // CodeMirror only exposes functions that move the cursor page down, so\n        // doing this bad hack to move the cursor and move it back. evalInput\n        // will move the cursor to where it should be in the end.\n        var curStart = cm.getCursor();\n        var repeat = motionArgs.repeat;\n        return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n      },\n      moveByParagraph: function(cm, motionArgs) {\n        var line = cm.getCursor().line;\n        var repeat = motionArgs.repeat;\n        var inc = motionArgs.forward ? 1 : -1;\n        for (var i = 0; i < repeat; i++) {\n          if ((!motionArgs.forward && line === cm.firstLine() ) ||\n              (motionArgs.forward && line == cm.lastLine())) {\n            break;\n          }\n          line += inc;\n          while (line !== cm.firstLine() && line != cm.lastLine() && cm.getLine(line)) {\n            line += inc;\n          }\n        }\n        return Pos(line, 0);\n      },\n      moveByScroll: function(cm, motionArgs, vim) {\n        var scrollbox = cm.getScrollInfo();\n        var curEnd = null;\n        var repeat = motionArgs.repeat;\n        if (!repeat) {\n          repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n        }\n        var orig = cm.charCoords(cm.getCursor(), 'local');\n        motionArgs.repeat = repeat;\n        var curEnd = motions.moveByDisplayLines(cm, motionArgs, vim);\n        if (!curEnd) {\n          return null;\n        }\n        var dest = cm.charCoords(curEnd, 'local');\n        cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n        return curEnd;\n      },\n      moveByWords: function(cm, motionArgs) {\n        return moveToWord(cm, motionArgs.repeat, !!motionArgs.forward,\n            !!motionArgs.wordEnd, !!motionArgs.bigWord);\n      },\n      moveTillCharacter: function(cm, motionArgs) {\n        var repeat = motionArgs.repeat;\n        var curEnd = moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter);\n        var increment = motionArgs.forward ? -1 : 1;\n        recordLastCharacterSearch(increment, motionArgs);\n        if (!curEnd) return null;\n        curEnd.ch += increment;\n        return curEnd;\n      },\n      moveToCharacter: function(cm, motionArgs) {\n        var repeat = motionArgs.repeat;\n        recordLastCharacterSearch(0, motionArgs);\n        return moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || cm.getCursor();\n      },\n      moveToSymbol: function(cm, motionArgs) {\n        var repeat = motionArgs.repeat;\n        return findSymbol(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || cm.getCursor();\n      },\n      moveToColumn: function(cm, motionArgs, vim) {\n        var repeat = motionArgs.repeat;\n        // repeat is equivalent to which column we want to move to!\n        vim.lastHPos = repeat - 1;\n        vim.lastHSPos = cm.charCoords(cm.getCursor(),'div').left;\n        return moveToColumn(cm, repeat);\n      },\n      moveToEol: function(cm, motionArgs, vim) {\n        var cur = cm.getCursor();\n        vim.lastHPos = Infinity;\n        var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);\n        var end=cm.clipPos(retval);\n        end.ch--;\n        vim.lastHSPos = cm.charCoords(end,'div').left;\n        return retval;\n      },\n      moveToFirstNonWhiteSpaceCharacter: function(cm) {\n        // Go to the start of the line where the text begins, or the end for\n        // whitespace-only lines\n        var cursor = cm.getCursor();\n        return Pos(cursor.line,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n      },\n      moveToMatchedSymbol: function(cm) {\n        var cursor = cm.getCursor();\n        var line = cursor.line;\n        var ch = cursor.ch;\n        var lineText = cm.getLine(line);\n        var symbol;\n        do {\n          symbol = lineText.charAt(ch++);\n          if (symbol && isMatchableSymbol(symbol)) {\n            var style = cm.getTokenTypeAt(Pos(line, ch));\n            if (style !== \"string\" && style !== \"comment\") {\n              break;\n            }\n          }\n        } while (symbol);\n        if (symbol) {\n          var matched = cm.findMatchingBracket(Pos(line, ch));\n          return matched.to;\n        } else {\n          return cursor;\n        }\n      },\n      moveToStartOfLine: function(cm) {\n        var cursor = cm.getCursor();\n        return Pos(cursor.line, 0);\n      },\n      moveToLineOrEdgeOfDocument: function(cm, motionArgs) {\n        var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n        if (motionArgs.repeatIsExplicit) {\n          lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n        }\n        return Pos(lineNum,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n      },\n      textObjectManipulation: function(cm, motionArgs) {\n        // TODO: lots of possible exceptions that can be thrown here. Try da(\n        //     outside of a () block.\n\n        // TODO: adding <> >< to this map doesn't work, presumably because\n        // they're operators\n        var mirroredPairs = {'(': ')', ')': '(',\n                             '{': '}', '}': '{',\n                             '[': ']', ']': '['};\n        var selfPaired = {'\\'': true, '\"': true};\n\n        var character = motionArgs.selectedCharacter;\n        // 'b' refers to  '()' block.\n        // 'B' refers to  '{}' block.\n        if (character == 'b') {\n          character = '(';\n        } else if (character == 'B') {\n          character = '{';\n        }\n\n        // Inclusive is the difference between a and i\n        // TODO: Instead of using the additional text object map to perform text\n        //     object operations, merge the map into the defaultKeyMap and use\n        //     motionArgs to define behavior. Define separate entries for 'aw',\n        //     'iw', 'a[', 'i[', etc.\n        var inclusive = !motionArgs.textObjectInner;\n\n        var tmp;\n        if (mirroredPairs[character]) {\n          tmp = selectCompanionObject(cm, character, inclusive);\n        } else if (selfPaired[character]) {\n          tmp = findBeginningAndEnd(cm, character, inclusive);\n        } else if (character === 'W') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     true /** bigWord */);\n        } else if (character === 'w') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     false /** bigWord */);\n        } else {\n          // No text object defined for this, don't move.\n          return null;\n        }\n\n        return [tmp.start, tmp.end];\n      },\n\n      repeatLastCharacterSearch: function(cm, motionArgs) {\n        var lastSearch = vimGlobalState.lastChararacterSearch;\n        var repeat = motionArgs.repeat;\n        var forward = motionArgs.forward === lastSearch.forward;\n        var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n        cm.moveH(-increment, 'char');\n        motionArgs.inclusive = forward ? true : false;\n        var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n        if (!curEnd) {\n          cm.moveH(increment, 'char');\n          return cm.getCursor();\n        }\n        curEnd.ch += increment;\n        return curEnd;\n      }\n    };\n\n    var operators = {\n      change: function(cm, operatorArgs, _vim, curStart, curEnd) {\n        vimGlobalState.registerController.pushText(\n            operatorArgs.registerName, 'change', cm.getRange(curStart, curEnd),\n            operatorArgs.linewise);\n        if (operatorArgs.linewise) {\n          // Push the next line back down, if there is a next line.\n          var replacement = curEnd.line > cm.lastLine() ? '' : '\\n';\n          cm.replaceRange(replacement, curStart, curEnd);\n          cm.indentLine(curStart.line, 'smart');\n          // null ch so setCursor moves to end of line.\n          curStart.ch = null;\n        } else {\n          // Exclude trailing whitespace if the range is not all whitespace.\n          var text = cm.getRange(curStart, curEnd);\n          if (!isWhiteSpaceString(text)) {\n            var match = (/\\s+$/).exec(text);\n            if (match) {\n              curEnd = offsetCursor(curEnd, 0, - match[0].length);\n            }\n          }\n          cm.replaceRange('', curStart, curEnd);\n        }\n        actions.enterInsertMode(cm, {}, cm.state.vim);\n        cm.setCursor(curStart);\n      },\n      // delete is a javascript keyword.\n      'delete': function(cm, operatorArgs, _vim, curStart, curEnd) {\n        // If the ending line is past the last line, inclusive, instead of\n        // including the trailing \\n, include the \\n before the starting line\n        if (operatorArgs.linewise &&\n            curEnd.line > cm.lastLine() && curStart.line > cm.firstLine()) {\n          curStart.line--;\n          curStart.ch = lineLength(cm, curStart.line);\n        }\n        vimGlobalState.registerController.pushText(\n            operatorArgs.registerName, 'delete', cm.getRange(curStart, curEnd),\n            operatorArgs.linewise);\n        cm.replaceRange('', curStart, curEnd);\n        if (operatorArgs.linewise) {\n          cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm));\n        } else {\n          cm.setCursor(curStart);\n        }\n      },\n      indent: function(cm, operatorArgs, vim, curStart, curEnd) {\n        var startLine = curStart.line;\n        var endLine = curEnd.line;\n        // In visual mode, n> shifts the selection right n times, instead of\n        // shifting n lines right once.\n        var repeat = (vim.visualMode) ? operatorArgs.repeat : 1;\n        if (operatorArgs.linewise) {\n          // The only way to delete a newline is to delete until the start of\n          // the next line, so in linewise mode evalInput will include the next\n          // line. We don't want this in indent, so we go back a line.\n          endLine--;\n        }\n        for (var i = startLine; i <= endLine; i++) {\n          for (var j = 0; j < repeat; j++) {\n            cm.indentLine(i, operatorArgs.indentRight);\n          }\n        }\n        cm.setCursor(curStart);\n        cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm));\n      },\n      swapcase: function(cm, operatorArgs, _vim, curStart, curEnd, curOriginal) {\n        var toSwap = cm.getRange(curStart, curEnd);\n        var swapped = '';\n        for (var i = 0; i < toSwap.length; i++) {\n          var character = toSwap.charAt(i);\n          swapped += isUpperCase(character) ? character.toLowerCase() :\n              character.toUpperCase();\n        }\n        cm.replaceRange(swapped, curStart, curEnd);\n        if (!operatorArgs.shouldMoveCursor) {\n          cm.setCursor(curOriginal);\n        }\n      },\n      yank: function(cm, operatorArgs, _vim, curStart, curEnd, curOriginal) {\n        vimGlobalState.registerController.pushText(\n            operatorArgs.registerName, 'yank',\n            cm.getRange(curStart, curEnd), operatorArgs.linewise);\n        cm.setCursor(curOriginal);\n      }\n    };\n\n    var actions = {\n      jumpListWalk: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat;\n        var forward = actionArgs.forward;\n        var jumpList = vimGlobalState.jumpList;\n\n        var mark = jumpList.move(cm, forward ? repeat : -repeat);\n        var markPos = mark ? mark.find() : undefined;\n        markPos = markPos ? markPos : cm.getCursor();\n        cm.setCursor(markPos);\n      },\n      scroll: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat || 1;\n        var lineHeight = cm.defaultTextHeight();\n        var top = cm.getScrollInfo().top;\n        var delta = lineHeight * repeat;\n        var newPos = actionArgs.forward ? top + delta : top - delta;\n        var cursor = copyCursor(cm.getCursor());\n        var cursorCoords = cm.charCoords(cursor, 'local');\n        if (actionArgs.forward) {\n          if (newPos > cursorCoords.top) {\n             cursor.line += (newPos - cursorCoords.top) / lineHeight;\n             cursor.line = Math.ceil(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(null, cursorCoords.top);\n          } else {\n             // Cursor stays within bounds.  Just reposition the scroll window.\n             cm.scrollTo(null, newPos);\n          }\n        } else {\n          var newBottom = newPos + cm.getScrollInfo().clientHeight;\n          if (newBottom < cursorCoords.bottom) {\n             cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n             cursor.line = Math.floor(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(\n                 null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n          } else {\n             // Cursor stays within bounds.  Just reposition the scroll window.\n             cm.scrollTo(null, newPos);\n          }\n        }\n      },\n      scrollToCursor: function(cm, actionArgs) {\n        var lineNum = cm.getCursor().line;\n        var charCoords = cm.charCoords(Pos(lineNum, 0), 'local');\n        var height = cm.getScrollInfo().clientHeight;\n        var y = charCoords.top;\n        var lineHeight = charCoords.bottom - y;\n        switch (actionArgs.position) {\n          case 'center': y = y - (height / 2) + lineHeight;\n            break;\n          case 'bottom': y = y - height + lineHeight*1.4;\n            break;\n          case 'top': y = y + lineHeight*0.4;\n            break;\n        }\n        cm.scrollTo(null, y);\n      },\n      replayMacro: function(cm, actionArgs, vim) {\n        var registerName = actionArgs.selectedCharacter;\n        var repeat = actionArgs.repeat;\n        var macroModeState = vimGlobalState.macroModeState;\n        if (registerName == '@') {\n          registerName = macroModeState.latestRegister;\n        }\n        while(repeat--){\n          executeMacroRegister(cm, vim, macroModeState, registerName);\n        }\n      },\n      enterMacroRecordMode: function(cm, actionArgs) {\n        var macroModeState = vimGlobalState.macroModeState;\n        var registerName = actionArgs.selectedCharacter;\n        macroModeState.enterMacroRecordMode(cm, registerName);\n      },\n      enterInsertMode: function(cm, actionArgs, vim) {\n        if (cm.getOption('readOnly')) { return; }\n        vim.insertMode = true;\n        vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n        var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n        if (insertAt == 'eol') {\n          var cursor = cm.getCursor();\n          cursor = Pos(cursor.line, lineLength(cm, cursor.line));\n          cm.setCursor(cursor);\n        } else if (insertAt == 'charAfter') {\n          cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n        } else if (insertAt == 'firstNonBlank') {\n          cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm));\n        }\n        cm.setOption('keyMap', 'vim-insert');\n        cm.setOption('disableInput', false);\n        if (actionArgs && actionArgs.replace) {\n          // Handle Replace-mode as a special case of insert mode.\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n        if (!vimGlobalState.macroModeState.isPlaying) {\n          // Only record if not replaying.\n          cm.on('change', onChange);\n          CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n        }\n      },\n      toggleVisualMode: function(cm, actionArgs, vim) {\n        var repeat = actionArgs.repeat;\n        var curStart = cm.getCursor();\n        var curEnd;\n        // TODO: The repeat should actually select number of characters/lines\n        //     equal to the repeat times the size of the previous visual\n        //     operation.\n        if (!vim.visualMode) {\n          cm.on('mousedown', exitVisualMode);\n          vim.visualMode = true;\n          vim.visualLine = !!actionArgs.linewise;\n          if (vim.visualLine) {\n            curStart.ch = 0;\n            curEnd = clipCursorToContent(\n              cm, Pos(curStart.line + repeat - 1, lineLength(cm, curStart.line)),\n              true /** includeLineBreak */);\n          } else {\n            curEnd = clipCursorToContent(\n              cm, Pos(curStart.line, curStart.ch + repeat),\n              true /** includeLineBreak */);\n          }\n          // Make the initial selection.\n          if (!actionArgs.repeatIsExplicit && !vim.visualLine) {\n            // This is a strange case. Here the implicit repeat is 1. The\n            // following commands lets the cursor hover over the 1 character\n            // selection.\n            cm.setCursor(curEnd);\n            cm.setSelection(curEnd, curStart);\n          } else {\n            cm.setSelection(curStart, curEnd);\n          }\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : \"\"});\n        } else {\n          curStart = cm.getCursor('anchor');\n          curEnd = cm.getCursor('head');\n          if (!vim.visualLine && actionArgs.linewise) {\n            // Shift-V pressed in characterwise visual mode. Switch to linewise\n            // visual mode instead of exiting visual mode.\n            vim.visualLine = true;\n            curStart.ch = cursorIsBefore(curStart, curEnd) ? 0 :\n                lineLength(cm, curStart.line);\n            curEnd.ch = cursorIsBefore(curStart, curEnd) ?\n                lineLength(cm, curEnd.line) : 0;\n            cm.setSelection(curStart, curEnd);\n            CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: \"linewise\"});\n          } else if (vim.visualLine && !actionArgs.linewise) {\n            // v pressed in linewise visual mode. Switch to characterwise visual\n            // mode instead of exiting visual mode.\n            vim.visualLine = false;\n            CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\"});\n          } else {\n            exitVisualMode(cm);\n          }\n        }\n        updateMark(cm, vim, '<', cursorIsBefore(curStart, curEnd) ? curStart\n            : curEnd);\n        updateMark(cm, vim, '>', cursorIsBefore(curStart, curEnd) ? curEnd\n            : curStart);\n      },\n      reselectLastSelection: function(cm, _actionArgs, vim) {\n        if (vim.lastSelection) {\n          var lastSelection = vim.lastSelection;\n          cm.setSelection(lastSelection.curStart, lastSelection.curEnd);\n          if (lastSelection.visualLine) {\n            vim.visualMode = true;\n            vim.visualLine = true;\n          }\n          else {\n            vim.visualMode = true;\n            vim.visualLine = false;\n          }\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : \"\"});\n        }\n      },\n      joinLines: function(cm, actionArgs, vim) {\n        var curStart, curEnd;\n        if (vim.visualMode) {\n          curStart = cm.getCursor('anchor');\n          curEnd = cm.getCursor('head');\n          curEnd.ch = lineLength(cm, curEnd.line) - 1;\n        } else {\n          // Repeat is the number of lines to join. Minimum 2 lines.\n          var repeat = Math.max(actionArgs.repeat, 2);\n          curStart = cm.getCursor();\n          curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1,\n                                               Infinity));\n        }\n        var finalCh = 0;\n        cm.operation(function() {\n          for (var i = curStart.line; i < curEnd.line; i++) {\n            finalCh = lineLength(cm, curStart.line);\n            var tmp = Pos(curStart.line + 1,\n                          lineLength(cm, curStart.line + 1));\n            var text = cm.getRange(curStart, tmp);\n            text = text.replace(/\\n\\s*/g, ' ');\n            cm.replaceRange(text, curStart, tmp);\n          }\n          var curFinalPos = Pos(curStart.line, finalCh);\n          cm.setCursor(curFinalPos);\n        });\n      },\n      newLineAndEnterInsertMode: function(cm, actionArgs, vim) {\n        vim.insertMode = true;\n        var insertAt = copyCursor(cm.getCursor());\n        if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n          // Special case for inserting newline before start of document.\n          cm.replaceRange('\\n', Pos(cm.firstLine(), 0));\n          cm.setCursor(cm.firstLine(), 0);\n        } else {\n          insertAt.line = (actionArgs.after) ? insertAt.line :\n              insertAt.line - 1;\n          insertAt.ch = lineLength(cm, insertAt.line);\n          cm.setCursor(insertAt);\n          var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n              CodeMirror.commands.newlineAndIndent;\n          newlineFn(cm);\n        }\n        this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n      },\n      paste: function(cm, actionArgs) {\n        var cur = copyCursor(cm.getCursor());\n        var register = vimGlobalState.registerController.getRegister(\n            actionArgs.registerName);\n        var text = register.toString();\n        if (!text) {\n          return;\n        }\n        if (actionArgs.matchIndent) {\n          // length that considers tabs and cm.options.tabSize\n          var whitespaceLength = function(str) {\n            var tabs = (str.split(\"\\t\").length - 1);\n            var spaces = (str.split(\" \").length - 1);\n            return tabs * cm.options.tabSize + spaces * 1;\n          };\n          var currentLine = cm.getLine(cm.getCursor().line);\n          var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n          // chomp last newline b/c don't want it to match /^\\s*/gm\n          var chompedText = text.replace(/\\n$/, '');\n          var wasChomped = text !== chompedText;\n          var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n          var text = chompedText.replace(/^\\s*/gm, function(wspace) {\n            var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n            if (newIndent < 0) {\n              return \"\";\n            }\n            else if (cm.options.indentWithTabs) {\n              var quotient = Math.floor(newIndent / cm.options.tabSize);\n              return Array(quotient + 1).join('\\t');\n            }\n            else {\n              return Array(newIndent + 1).join(' ');\n            }\n          });\n          text += wasChomped ? \"\\n\" : \"\";\n        }\n        if (actionArgs.repeat > 1) {\n          var text = Array(actionArgs.repeat + 1).join(text);\n        }\n        var linewise = register.linewise;\n        if (linewise) {\n          if (actionArgs.after) {\n            // Move the newline at the end to the start instead, and paste just\n            // before the newline character of the line we are on right now.\n            text = '\\n' + text.slice(0, text.length - 1);\n            cur.ch = lineLength(cm, cur.line);\n          } else {\n            cur.ch = 0;\n          }\n        } else {\n          cur.ch += actionArgs.after ? 1 : 0;\n        }\n        cm.replaceRange(text, cur);\n        // Now fine tune the cursor to where we want it.\n        var curPosFinal;\n        var idx;\n        if (linewise && actionArgs.after) {\n          curPosFinal = Pos(\n            cur.line + 1,\n            findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));\n        } else if (linewise && !actionArgs.after) {\n          curPosFinal = Pos(\n            cur.line,\n            findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));\n        } else if (!linewise && actionArgs.after) {\n          idx = cm.indexFromPos(cur);\n          curPosFinal = cm.posFromIndex(idx + text.length - 1);\n        } else {\n          idx = cm.indexFromPos(cur);\n          curPosFinal = cm.posFromIndex(idx + text.length);\n        }\n        cm.setCursor(curPosFinal);\n      },\n      undo: function(cm, actionArgs) {\n        cm.operation(function() {\n          repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n          cm.setCursor(cm.getCursor('anchor'));\n        });\n      },\n      redo: function(cm, actionArgs) {\n        repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n      },\n      setRegister: function(_cm, actionArgs, vim) {\n        vim.inputState.registerName = actionArgs.selectedCharacter;\n      },\n      setMark: function(cm, actionArgs, vim) {\n        var markName = actionArgs.selectedCharacter;\n        updateMark(cm, vim, markName, cm.getCursor());\n      },\n      replace: function(cm, actionArgs, vim) {\n        var replaceWith = actionArgs.selectedCharacter;\n        var curStart = cm.getCursor();\n        var replaceTo;\n        var curEnd;\n        if (vim.visualMode){\n          curStart=cm.getCursor('start');\n          curEnd=cm.getCursor('end');\n          // workaround to catch the character under the cursor\n          //  existing workaround doesn't cover actions\n          curEnd=cm.clipPos(Pos(curEnd.line, curEnd.ch+1));\n        }else{\n          var line = cm.getLine(curStart.line);\n          replaceTo = curStart.ch + actionArgs.repeat;\n          if (replaceTo > line.length) {\n            replaceTo=line.length;\n          }\n          curEnd = Pos(curStart.line, replaceTo);\n        }\n        if (replaceWith=='\\n'){\n          if (!vim.visualMode) cm.replaceRange('', curStart, curEnd);\n          // special case, where vim help says to replace by just one line-break\n          (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n        }else {\n          var replaceWithStr=cm.getRange(curStart, curEnd);\n          //replace all characters in range by selected, but keep linebreaks\n          replaceWithStr=replaceWithStr.replace(/[^\\n]/g,replaceWith);\n          cm.replaceRange(replaceWithStr, curStart, curEnd);\n          if (vim.visualMode){\n            cm.setCursor(curStart);\n            exitVisualMode(cm);\n          }else{\n            cm.setCursor(offsetCursor(curEnd, 0, -1));\n          }\n        }\n      },\n      incrementNumberToken: function(cm, actionArgs) {\n        var cur = cm.getCursor();\n        var lineStr = cm.getLine(cur.line);\n        var re = /-?\\d+/g;\n        var match;\n        var start;\n        var end;\n        var numberStr;\n        var token;\n        while ((match = re.exec(lineStr)) !== null) {\n          token = match[0];\n          start = match.index;\n          end = start + token.length;\n          if (cur.ch < end)break;\n        }\n        if (!actionArgs.backtrack && (end <= cur.ch))return;\n        if (token) {\n          var increment = actionArgs.increase ? 1 : -1;\n          var number = parseInt(token) + (increment * actionArgs.repeat);\n          var from = Pos(cur.line, start);\n          var to = Pos(cur.line, end);\n          numberStr = number.toString();\n          cm.replaceRange(numberStr, from, to);\n        } else {\n          return;\n        }\n        cm.setCursor(Pos(cur.line, start + numberStr.length - 1));\n      },\n      repeatLastEdit: function(cm, actionArgs, vim) {\n        var lastEditInputState = vim.lastEditInputState;\n        if (!lastEditInputState) { return; }\n        var repeat = actionArgs.repeat;\n        if (repeat && actionArgs.repeatIsExplicit) {\n          vim.lastEditInputState.repeatOverride = repeat;\n        } else {\n          repeat = vim.lastEditInputState.repeatOverride || repeat;\n        }\n        repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n      },\n      changeCase: function(cm, actionArgs, vim) {\n        var selectedAreaRange = getSelectedAreaRange(cm, vim);\n        var selectionStart = selectedAreaRange[0];\n        var selectionEnd = selectedAreaRange[1];\n        var toLower = actionArgs.toLower;\n        if (cursorIsBefore(selectionEnd, selectionStart)) {\n          var tmp = selectionStart;\n          selectionStart = selectionEnd;\n          selectionEnd = tmp;\n        } else {\n          selectionEnd = cm.clipPos(Pos(selectionEnd.line, selectionEnd.ch+1));\n        }\n        var text = cm.getRange(selectionStart, selectionEnd);\n        cm.replaceRange(toLower ? text.toLowerCase() : text.toUpperCase(), selectionStart, selectionEnd);\n        cm.setCursor(selectionStart);\n      }\n    };\n\n    /*\n     * Below are miscellaneous utility functions used by vim.js\n     */\n\n    /**\n     * Clips cursor to ensure that line is within the buffer's range\n     * If includeLineBreak is true, then allow cur.ch == lineLength.\n     */\n    function clipCursorToContent(cm, cur, includeLineBreak) {\n      var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() );\n      var maxCh = lineLength(cm, line) - 1;\n      maxCh = (includeLineBreak) ? maxCh + 1 : maxCh;\n      var ch = Math.min(Math.max(0, cur.ch), maxCh);\n      return Pos(line, ch);\n    }\n    function copyArgs(args) {\n      var ret = {};\n      for (var prop in args) {\n        if (args.hasOwnProperty(prop)) {\n          ret[prop] = args[prop];\n        }\n      }\n      return ret;\n    }\n    function offsetCursor(cur, offsetLine, offsetCh) {\n      return Pos(cur.line + offsetLine, cur.ch + offsetCh);\n    }\n    function matchKeysPartial(pressed, mapped) {\n      for (var i = 0; i < pressed.length; i++) {\n        // 'character' means any character. For mark, register commads, etc.\n        if (pressed[i] != mapped[i] && mapped[i] != 'character') {\n          return false;\n        }\n      }\n      return true;\n    }\n    function repeatFn(cm, fn, repeat) {\n      return function() {\n        for (var i = 0; i < repeat; i++) {\n          fn(cm);\n        }\n      };\n    }\n    function copyCursor(cur) {\n      return Pos(cur.line, cur.ch);\n    }\n    function cursorEqual(cur1, cur2) {\n      return cur1.ch == cur2.ch && cur1.line == cur2.line;\n    }\n    function cursorIsBefore(cur1, cur2) {\n      if (cur1.line < cur2.line) {\n        return true;\n      }\n      if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n        return true;\n      }\n      return false;\n    }\n    function cusrorIsBetween(cur1, cur2, cur3) {\n      // returns true if cur2 is between cur1 and cur3.\n      var cur1before2 = cursorIsBefore(cur1, cur2);\n      var cur2before3 = cursorIsBefore(cur2, cur3);\n      return cur1before2 && cur2before3;\n    }\n    function lineLength(cm, lineNum) {\n      return cm.getLine(lineNum).length;\n    }\n    function reverse(s){\n      return s.split('').reverse().join('');\n    }\n    function trim(s) {\n      if (s.trim) {\n        return s.trim();\n      }\n      return s.replace(/^\\s+|\\s+$/g, '');\n    }\n    function escapeRegex(s) {\n      return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n    }\n    function getSelectedAreaRange(cm, vim) {\n      var selectionStart = cm.getCursor('anchor');\n      var selectionEnd = cm.getCursor('head');\n      var lastSelection = vim.lastSelection;\n      if (!vim.visualMode) {\n        var line = lastSelection.curEnd.line - lastSelection.curStart.line;\n        var ch = line ? lastSelection.curEnd.ch : lastSelection.curEnd.ch - lastSelection.curStart.ch;\n        selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};\n        if (lastSelection.visualLine) {\n          return [{line: selectionStart.line, ch: 0}, {line: selectionEnd.line, ch: lineLength(cm, selectionEnd.line)}];\n        }\n      } else {\n        exitVisualMode(cm);\n      }\n      return [selectionStart, selectionEnd];\n    }\n\n    function exitVisualMode(cm) {\n      cm.off('mousedown', exitVisualMode);\n      var vim = cm.state.vim;\n      // can't use selection state here because yank has already reset its cursor\n      vim.lastSelection = {'curStart': vim.marks['<'].find(),\n        'curEnd': vim.marks['>'].find(), 'visualMode': vim.visualMode,\n        'visualLine': vim.visualLine};\n      vim.visualMode = false;\n      vim.visualLine = false;\n      var selectionStart = cm.getCursor('anchor');\n      var selectionEnd = cm.getCursor('head');\n      if (!cursorEqual(selectionStart, selectionEnd)) {\n        // Clear the selection and set the cursor only if the selection has not\n        // already been cleared. Otherwise we risk moving the cursor somewhere\n        // it's not supposed to be.\n        cm.setCursor(clipCursorToContent(cm, selectionEnd));\n      }\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n    }\n\n    // Remove any trailing newlines from the selection. For\n    // example, with the caret at the start of the last word on the line,\n    // 'dw' should word, but not the newline, while 'w' should advance the\n    // caret to the first character of the next line.\n    function clipToLine(cm, curStart, curEnd) {\n      var selection = cm.getRange(curStart, curEnd);\n      // Only clip if the selection ends with trailing newline + whitespace\n      if (/\\n\\s*$/.test(selection)) {\n        var lines = selection.split('\\n');\n        // We know this is all whitepsace.\n        lines.pop();\n\n        // Cases:\n        // 1. Last word is an empty line - do not clip the trailing '\\n'\n        // 2. Last word is not an empty line - clip the trailing '\\n'\n        var line;\n        // Find the line containing the last word, and clip all whitespace up\n        // to it.\n        for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n          curEnd.line--;\n          curEnd.ch = 0;\n        }\n        // If the last word is not an empty line, clip an additional newline\n        if (line) {\n          curEnd.line--;\n          curEnd.ch = lineLength(cm, curEnd.line);\n        } else {\n          curEnd.ch = 0;\n        }\n      }\n    }\n\n    // Expand the selection to line ends.\n    function expandSelectionToLine(_cm, curStart, curEnd) {\n      curStart.ch = 0;\n      curEnd.ch = 0;\n      curEnd.line++;\n    }\n\n    function findFirstNonWhiteSpaceCharacter(text) {\n      if (!text) {\n        return 0;\n      }\n      var firstNonWS = text.search(/\\S/);\n      return firstNonWS == -1 ? text.length : firstNonWS;\n    }\n\n    function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {\n      var cur = cm.getCursor();\n      var line = cm.getLine(cur.line);\n      var idx = cur.ch;\n\n      // Seek to first word or non-whitespace character, depending on if\n      // noSymbol is true.\n      var textAfterIdx = line.substring(idx);\n      var firstMatchedChar;\n      if (noSymbol) {\n        firstMatchedChar = textAfterIdx.search(/\\w/);\n      } else {\n        firstMatchedChar = textAfterIdx.search(/\\S/);\n      }\n      if (firstMatchedChar == -1) {\n        return null;\n      }\n      idx += firstMatchedChar;\n      textAfterIdx = line.substring(idx);\n      var textBeforeIdx = line.substring(0, idx);\n\n      var matchRegex;\n      // Greedy matchers for the \"word\" we are trying to expand.\n      if (bigWord) {\n        matchRegex = /^\\S+/;\n      } else {\n        if ((/\\w/).test(line.charAt(idx))) {\n          matchRegex = /^\\w+/;\n        } else {\n          matchRegex = /^[^\\w\\s]+/;\n        }\n      }\n\n      var wordAfterRegex = matchRegex.exec(textAfterIdx);\n      var wordStart = idx;\n      var wordEnd = idx + wordAfterRegex[0].length;\n      // TODO: Find a better way to do this. It will be slow on very long lines.\n      var revTextBeforeIdx = reverse(textBeforeIdx);\n      var wordBeforeRegex = matchRegex.exec(revTextBeforeIdx);\n      if (wordBeforeRegex) {\n        wordStart -= wordBeforeRegex[0].length;\n      }\n\n      if (inclusive) {\n        // If present, trim all whitespace after word.\n        // Otherwise, trim all whitespace before word.\n        var textAfterWordEnd = line.substring(wordEnd);\n        var whitespacesAfterWord = textAfterWordEnd.match(/^\\s*/)[0].length;\n        if (whitespacesAfterWord > 0) {\n          wordEnd += whitespacesAfterWord;\n        } else {\n          var revTrim = revTextBeforeIdx.length - wordStart;\n          var textBeforeWordStart = revTextBeforeIdx.substring(revTrim);\n          var whitespacesBeforeWord = textBeforeWordStart.match(/^\\s*/)[0].length;\n          wordStart -= whitespacesBeforeWord;\n        }\n      }\n\n      return { start: Pos(cur.line, wordStart),\n               end: Pos(cur.line, wordEnd) };\n    }\n\n    function recordJumpPosition(cm, oldCur, newCur) {\n      if (!cursorEqual(oldCur, newCur)) {\n        vimGlobalState.jumpList.add(cm, oldCur, newCur);\n      }\n    }\n\n    function recordLastCharacterSearch(increment, args) {\n        vimGlobalState.lastChararacterSearch.increment = increment;\n        vimGlobalState.lastChararacterSearch.forward = args.forward;\n        vimGlobalState.lastChararacterSearch.selectedCharacter = args.selectedCharacter;\n    }\n\n    var symbolToMode = {\n        '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n        '[': 'section', ']': 'section',\n        '*': 'comment', '/': 'comment',\n        'm': 'method', 'M': 'method',\n        '#': 'preprocess'\n    };\n    var findSymbolModes = {\n      bracket: {\n        isComplete: function(state) {\n          if (state.nextCh === state.symb) {\n            state.depth++;\n            if (state.depth >= 1)return true;\n          } else if (state.nextCh === state.reverseSymb) {\n            state.depth--;\n          }\n          return false;\n        }\n      },\n      section: {\n        init: function(state) {\n          state.curMoveThrough = true;\n          state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n        },\n        isComplete: function(state) {\n          return state.index === 0 && state.nextCh === state.symb;\n        }\n      },\n      comment: {\n        isComplete: function(state) {\n          var found = state.lastCh === '*' && state.nextCh === '/';\n          state.lastCh = state.nextCh;\n          return found;\n        }\n      },\n      // TODO: The original Vim implementation only operates on level 1 and 2.\n      // The current implementation doesn't check for code block level and\n      // therefore it operates on any levels.\n      method: {\n        init: function(state) {\n          state.symb = (state.symb === 'm' ? '{' : '}');\n          state.reverseSymb = state.symb === '{' ? '}' : '{';\n        },\n        isComplete: function(state) {\n          if (state.nextCh === state.symb)return true;\n          return false;\n        }\n      },\n      preprocess: {\n        init: function(state) {\n          state.index = 0;\n        },\n        isComplete: function(state) {\n          if (state.nextCh === '#') {\n            var token = state.lineText.match(/#(\\w+)/)[1];\n            if (token === 'endif') {\n              if (state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth++;\n            } else if (token === 'if') {\n              if (!state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth--;\n            }\n            if (token === 'else' && state.depth === 0)return true;\n          }\n          return false;\n        }\n      }\n    };\n    function findSymbol(cm, repeat, forward, symb) {\n      var cur = copyCursor(cm.getCursor());\n      var increment = forward ? 1 : -1;\n      var endLine = forward ? cm.lineCount() : -1;\n      var curCh = cur.ch;\n      var line = cur.line;\n      var lineText = cm.getLine(line);\n      var state = {\n        lineText: lineText,\n        nextCh: lineText.charAt(curCh),\n        lastCh: null,\n        index: curCh,\n        symb: symb,\n        reverseSymb: (forward ?  { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n        forward: forward,\n        depth: 0,\n        curMoveThrough: false\n      };\n      var mode = symbolToMode[symb];\n      if (!mode)return cur;\n      var init = findSymbolModes[mode].init;\n      var isComplete = findSymbolModes[mode].isComplete;\n      if (init) { init(state); }\n      while (line !== endLine && repeat) {\n        state.index += increment;\n        state.nextCh = state.lineText.charAt(state.index);\n        if (!state.nextCh) {\n          line += increment;\n          state.lineText = cm.getLine(line) || '';\n          if (increment > 0) {\n            state.index = 0;\n          } else {\n            var lineLen = state.lineText.length;\n            state.index = (lineLen > 0) ? (lineLen-1) : 0;\n          }\n          state.nextCh = state.lineText.charAt(state.index);\n        }\n        if (isComplete(state)) {\n          cur.line = line;\n          cur.ch = state.index;\n          repeat--;\n        }\n      }\n      if (state.nextCh || state.curMoveThrough) {\n        return Pos(line, state.index);\n      }\n      return cur;\n    }\n\n    /*\n     * Returns the boundaries of the next word. If the cursor in the middle of\n     * the word, then returns the boundaries of the current word, starting at\n     * the cursor. If the cursor is at the start/end of a word, and we are going\n     * forward/backward, respectively, find the boundaries of the next word.\n     *\n     * @param {CodeMirror} cm CodeMirror object.\n     * @param {Cursor} cur The cursor position.\n     * @param {boolean} forward True to search forward. False to search\n     *     backward.\n     * @param {boolean} bigWord True if punctuation count as part of the word.\n     *     False if only [a-zA-Z0-9] characters count as part of the word.\n     * @param {boolean} emptyLineIsWord True if empty lines should be treated\n     *     as words.\n     * @return {Object{from:number, to:number, line: number}} The boundaries of\n     *     the word, or null if there are no more words.\n     */\n    function findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n      var lineNum = cur.line;\n      var pos = cur.ch;\n      var line = cm.getLine(lineNum);\n      var dir = forward ? 1 : -1;\n      var regexps = bigWord ? bigWordRegexp : wordRegexp;\n\n      if (emptyLineIsWord && line == '') {\n        lineNum += dir;\n        line = cm.getLine(lineNum);\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        pos = (forward) ? 0 : line.length;\n      }\n\n      while (true) {\n        if (emptyLineIsWord && line == '') {\n          return { from: 0, to: 0, line: lineNum };\n        }\n        var stop = (dir > 0) ? line.length : -1;\n        var wordStart = stop, wordEnd = stop;\n        // Find bounds of next word.\n        while (pos != stop) {\n          var foundWord = false;\n          for (var i = 0; i < regexps.length && !foundWord; ++i) {\n            if (regexps[i].test(line.charAt(pos))) {\n              wordStart = pos;\n              // Advance to end of word.\n              while (pos != stop && regexps[i].test(line.charAt(pos))) {\n                pos += dir;\n              }\n              wordEnd = pos;\n              foundWord = wordStart != wordEnd;\n              if (wordStart == cur.ch && lineNum == cur.line &&\n                  wordEnd == wordStart + dir) {\n                // We started at the end of a word. Find the next one.\n                continue;\n              } else {\n                return {\n                  from: Math.min(wordStart, wordEnd + 1),\n                  to: Math.max(wordStart, wordEnd),\n                  line: lineNum };\n              }\n            }\n          }\n          if (!foundWord) {\n            pos += dir;\n          }\n        }\n        // Advance to next/prev line.\n        lineNum += dir;\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        line = cm.getLine(lineNum);\n        pos = (dir > 0) ? 0 : line.length;\n      }\n      // Should never get here.\n      throw new Error('The impossible happened.');\n    }\n\n    /**\n     * @param {CodeMirror} cm CodeMirror object.\n     * @param {int} repeat Number of words to move past.\n     * @param {boolean} forward True to search forward. False to search\n     *     backward.\n     * @param {boolean} wordEnd True to move to end of word. False to move to\n     *     beginning of word.\n     * @param {boolean} bigWord True if punctuation count as part of the word.\n     *     False if only alphabet characters count as part of the word.\n     * @return {Cursor} The position the cursor should move to.\n     */\n    function moveToWord(cm, repeat, forward, wordEnd, bigWord) {\n      var cur = cm.getCursor();\n      var curStart = copyCursor(cur);\n      var words = [];\n      if (forward && !wordEnd || !forward && wordEnd) {\n        repeat++;\n      }\n      // For 'e', empty lines are not considered words, go figure.\n      var emptyLineIsWord = !(forward && wordEnd);\n      for (var i = 0; i < repeat; i++) {\n        var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n        if (!word) {\n          var eodCh = lineLength(cm, cm.lastLine());\n          words.push(forward\n              ? {line: cm.lastLine(), from: eodCh, to: eodCh}\n              : {line: 0, from: 0, to: 0});\n          break;\n        }\n        words.push(word);\n        cur = Pos(word.line, forward ? (word.to - 1) : word.from);\n      }\n      var shortCircuit = words.length != repeat;\n      var firstWord = words[0];\n      var lastWord = words.pop();\n      if (forward && !wordEnd) {\n        // w\n        if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n          // We did not start in the middle of a word. Discard the extra word at the end.\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.from);\n      } else if (forward && wordEnd) {\n        return Pos(lastWord.line, lastWord.to - 1);\n      } else if (!forward && wordEnd) {\n        // ge\n        if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n          // We did not start in the middle of a word. Discard the extra word at the end.\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.to);\n      } else {\n        // b\n        return Pos(lastWord.line, lastWord.from);\n      }\n    }\n\n    function moveToCharacter(cm, repeat, forward, character) {\n      var cur = cm.getCursor();\n      var start = cur.ch;\n      var idx;\n      for (var i = 0; i < repeat; i ++) {\n        var line = cm.getLine(cur.line);\n        idx = charIdxInLine(start, line, character, forward, true);\n        if (idx == -1) {\n          return null;\n        }\n        start = idx;\n      }\n      return Pos(cm.getCursor().line, idx);\n    }\n\n    function moveToColumn(cm, repeat) {\n      // repeat is always >= 1, so repeat - 1 always corresponds\n      // to the column we want to go to.\n      var line = cm.getCursor().line;\n      return clipCursorToContent(cm, Pos(line, repeat - 1));\n    }\n\n    function updateMark(cm, vim, markName, pos) {\n      if (!inArray(markName, validMarks)) {\n        return;\n      }\n      if (vim.marks[markName]) {\n        vim.marks[markName].clear();\n      }\n      vim.marks[markName] = cm.setBookmark(pos);\n    }\n\n    function charIdxInLine(start, line, character, forward, includeChar) {\n      // Search for char in line.\n      // motion_options: {forward, includeChar}\n      // If includeChar = true, include it too.\n      // If forward = true, search forward, else search backwards.\n      // If char is not found on this line, do nothing\n      var idx;\n      if (forward) {\n        idx = line.indexOf(character, start + 1);\n        if (idx != -1 && !includeChar) {\n          idx -= 1;\n        }\n      } else {\n        idx = line.lastIndexOf(character, start - 1);\n        if (idx != -1 && !includeChar) {\n          idx += 1;\n        }\n      }\n      return idx;\n    }\n\n    // TODO: perhaps this finagling of start and end positions belonds\n    // in codmirror/replaceRange?\n    function selectCompanionObject(cm, symb, inclusive) {\n      var cur = cm.getCursor(), start, end;\n\n      var bracketRegexp = ({\n        '(': /[()]/, ')': /[()]/,\n        '[': /[[\\]]/, ']': /[[\\]]/,\n        '{': /[{}]/, '}': /[{}]/})[symb];\n      var openSym = ({\n        '(': '(', ')': '(',\n        '[': '[', ']': '[',\n        '{': '{', '}': '{'})[symb];\n      var curChar = cm.getLine(cur.line).charAt(cur.ch);\n      // Due to the behavior of scanForBracket, we need to add an offset if the\n      // cursor is on a matching open bracket.\n      var offset = curChar === openSym ? 1 : 0;\n\n      start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp});\n      end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp});\n\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      start = start.pos;\n      end = end.pos;\n\n      if ((start.line == end.line && start.ch > end.ch)\n          || (start.line > end.line)) {\n        var tmp = start;\n        start = end;\n        end = tmp;\n      }\n\n      if (inclusive) {\n        end.ch += 1;\n      } else {\n        start.ch += 1;\n      }\n\n      return { start: start, end: end };\n    }\n\n    // Takes in a symbol and a cursor and tries to simulate text objects that\n    // have identical opening and closing symbols\n    // TODO support across multiple lines\n    function findBeginningAndEnd(cm, symb, inclusive) {\n      var cur = copyCursor(cm.getCursor());\n      var line = cm.getLine(cur.line);\n      var chars = line.split('');\n      var start, end, i, len;\n      var firstIndex = chars.indexOf(symb);\n\n      // the decision tree is to always look backwards for the beginning first,\n      // but if the cursor is in front of the first instance of the symb,\n      // then move the cursor forward\n      if (cur.ch < firstIndex) {\n        cur.ch = firstIndex;\n        // Why is this line even here???\n        // cm.setCursor(cur.line, firstIndex+1);\n      }\n      // otherwise if the cursor is currently on the closing symbol\n      else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n        end = cur.ch; // assign end to the current cursor\n        --cur.ch; // make sure to look backwards\n      }\n\n      // if we're currently on the symbol, we've got a start\n      if (chars[cur.ch] == symb && !end) {\n        start = cur.ch + 1; // assign start to ahead of the cursor\n      } else {\n        // go backwards to find the start\n        for (i = cur.ch; i > -1 && !start; i--) {\n          if (chars[i] == symb) {\n            start = i + 1;\n          }\n        }\n      }\n\n      // look forwards for the end symbol\n      if (start && !end) {\n        for (i = start, len = chars.length; i < len && !end; i++) {\n          if (chars[i] == symb) {\n            end = i;\n          }\n        }\n      }\n\n      // nothing found\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      // include the symbols\n      if (inclusive) {\n        --start; ++end;\n      }\n\n      return {\n        start: Pos(cur.line, start),\n        end: Pos(cur.line, end)\n      };\n    }\n\n    // Search functions\n    defineOption('pcre', true, 'boolean');\n    function SearchState() {}\n    SearchState.prototype = {\n      getQuery: function() {\n        return vimGlobalState.query;\n      },\n      setQuery: function(query) {\n        vimGlobalState.query = query;\n      },\n      getOverlay: function() {\n        return this.searchOverlay;\n      },\n      setOverlay: function(overlay) {\n        this.searchOverlay = overlay;\n      },\n      isReversed: function() {\n        return vimGlobalState.isReversed;\n      },\n      setReversed: function(reversed) {\n        vimGlobalState.isReversed = reversed;\n      }\n    };\n    function getSearchState(cm) {\n      var vim = cm.state.vim;\n      return vim.searchState_ || (vim.searchState_ = new SearchState());\n    }\n    function dialog(cm, template, shortText, onClose, options) {\n      if (cm.openDialog) {\n        cm.openDialog(template, onClose, { bottom: true, value: options.value,\n            onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp });\n      }\n      else {\n        onClose(prompt(shortText, ''));\n      }\n    }\n\n    function findUnescapedSlashes(str) {\n      var escapeNextChar = false;\n      var slashes = [];\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charAt(i);\n        if (!escapeNextChar && c == '/') {\n          slashes.push(i);\n        }\n        escapeNextChar = !escapeNextChar && (c == '\\\\');\n      }\n      return slashes;\n    }\n\n    // Translates a search string from ex (vim) syntax into javascript form.\n    function translateRegex(str) {\n      // When these match, add a '\\' if unescaped or remove one if escaped.\n      var specials = '|(){';\n      // Remove, but never add, a '\\' for these.\n      var unescape = '}';\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        var specialComesNext = (n && specials.indexOf(n) != -1);\n        if (escapeNextChar) {\n          if (c !== '\\\\' || !specialComesNext) {\n            out.push(c);\n          }\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            // Treat the unescape list as special for removing, but not adding '\\'.\n            if (n && unescape.indexOf(n) != -1) {\n              specialComesNext = true;\n            }\n            // Not passing this test means removing a '\\'.\n            if (!specialComesNext || n === '\\\\') {\n              out.push(c);\n            }\n          } else {\n            out.push(c);\n            if (specialComesNext && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n\n    // Translates the replace part of a search and replace from ex (vim) syntax into\n    // javascript form.  Similar to translateRegex, but additionally fixes back references\n    // (translates '\\[0..9]' to '$[0..9]') and follows different rules for escaping '$'.\n    function translateRegexReplace(str) {\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        if (escapeNextChar) {\n          // At any point in the loop, escapeNextChar is true if the previous\n          // character was a '\\' and was not escaped.\n          out.push(c);\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if ((isNumber(n) || n === '$')) {\n              out.push('$');\n            } else if (n !== '/' && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          } else {\n            if (c === '$') {\n              out.push('$');\n            }\n            out.push(c);\n            if (n === '/') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n\n    // Unescape \\ and / in the replace part, for PCRE mode.\n    function unescapeRegexReplace(str) {\n      var stream = new CodeMirror.StringStream(str);\n      var output = [];\n      while (!stream.eol()) {\n        // Search for \\.\n        while (stream.peek() && stream.peek() != '\\\\') {\n          output.push(stream.next());\n        }\n        if (stream.match('\\\\/', true)) {\n          // \\/ => /\n          output.push('/');\n        } else if (stream.match('\\\\\\\\', true)) {\n          // \\\\ => \\\n          output.push('\\\\');\n        } else {\n          // Don't change anything\n          output.push(stream.next());\n        }\n      }\n      return output.join('');\n    }\n\n    /**\n     * Extract the regular expression from the query and return a Regexp object.\n     * Returns null if the query is blank.\n     * If ignoreCase is passed in, the Regexp object will have the 'i' flag set.\n     * If smartCase is passed in, and the query contains upper case letters,\n     *   then ignoreCase is overridden, and the 'i' flag will not be set.\n     * If the query contains the /i in the flag part of the regular expression,\n     *   then both ignoreCase and smartCase are ignored, and 'i' will be passed\n     *   through to the Regex object.\n     */\n    function parseQuery(query, ignoreCase, smartCase) {\n      // Check if the query is already a regex.\n      if (query instanceof RegExp) { return query; }\n      // First try to extract regex + flags from the input. If no flags found,\n      // extract just the regex. IE does not accept flags directly defined in\n      // the regex string in the form /regex/flags\n      var slashes = findUnescapedSlashes(query);\n      var regexPart;\n      var forceIgnoreCase;\n      if (!slashes.length) {\n        // Query looks like 'regexp'\n        regexPart = query;\n      } else {\n        // Query looks like 'regexp/...'\n        regexPart = query.substring(0, slashes[0]);\n        var flagsPart = query.substring(slashes[0]);\n        forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n      }\n      if (!regexPart) {\n        return null;\n      }\n      if (!getOption('pcre')) {\n        regexPart = translateRegex(regexPart);\n      }\n      if (smartCase) {\n        ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n      }\n      var regexp = new RegExp(regexPart,\n          (ignoreCase || forceIgnoreCase) ? 'i' : undefined);\n      return regexp;\n    }\n    function showConfirm(cm, text) {\n      if (cm.openNotification) {\n        cm.openNotification('<span style=\"color: red\">' + text + '</span>',\n                            {bottom: true, duration: 5000});\n      } else {\n        alert(text);\n      }\n    }\n    function makePrompt(prefix, desc) {\n      var raw = '';\n      if (prefix) {\n        raw += '<span style=\"font-family: monospace\">' + prefix + '</span>';\n      }\n      raw += '<input type=\"text\"/> ' +\n          '<span style=\"color: #888\">';\n      if (desc) {\n        raw += '<span style=\"color: #888\">';\n        raw += desc;\n        raw += '</span>';\n      }\n      return raw;\n    }\n    var searchPromptDesc = '(Javascript regexp)';\n    function showPrompt(cm, options) {\n      var shortText = (options.prefix || '') + ' ' + (options.desc || '');\n      var prompt = makePrompt(options.prefix, options.desc);\n      dialog(cm, prompt, shortText, options.onClose, options);\n    }\n    function regexEqual(r1, r2) {\n      if (r1 instanceof RegExp && r2 instanceof RegExp) {\n          var props = ['global', 'multiline', 'ignoreCase', 'source'];\n          for (var i = 0; i < props.length; i++) {\n              var prop = props[i];\n              if (r1[prop] !== r2[prop]) {\n                  return false;\n              }\n          }\n          return true;\n      }\n      return false;\n    }\n    // Returns true if the query is valid.\n    function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n      if (!rawQuery) {\n        return;\n      }\n      var state = getSearchState(cm);\n      var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n      if (!query) {\n        return;\n      }\n      highlightSearchMatches(cm, query);\n      if (regexEqual(query, state.getQuery())) {\n        return query;\n      }\n      state.setQuery(query);\n      return query;\n    }\n    function searchOverlay(query) {\n      if (query.source.charAt(0) == '^') {\n        var matchSol = true;\n      }\n      return {\n        token: function(stream) {\n          if (matchSol && !stream.sol()) {\n            stream.skipToEnd();\n            return;\n          }\n          var match = stream.match(query, false);\n          if (match) {\n            if (match[0].length == 0) {\n              // Matched empty string, skip to next.\n              stream.next();\n              return 'searching';\n            }\n            if (!stream.sol()) {\n              // Backtrack 1 to match \\b\n              stream.backUp(1);\n              if (!query.exec(stream.next() + match[0])) {\n                stream.next();\n                return null;\n              }\n            }\n            stream.match(query);\n            return 'searching';\n          }\n          while (!stream.eol()) {\n            stream.next();\n            if (stream.match(query, false)) break;\n          }\n        },\n        query: query\n      };\n    }\n    function highlightSearchMatches(cm, query) {\n      var overlay = getSearchState(cm).getOverlay();\n      if (!overlay || query != overlay.query) {\n        if (overlay) {\n          cm.removeOverlay(overlay);\n        }\n        overlay = searchOverlay(query);\n        cm.addOverlay(overlay);\n        getSearchState(cm).setOverlay(overlay);\n      }\n    }\n    function findNext(cm, prev, query, repeat) {\n      if (repeat === undefined) { repeat = 1; }\n      return cm.operation(function() {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        for (var i = 0; i < repeat; i++) {\n          var found = cursor.find(prev);\n          if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }\n          if (!found) {\n            // SearchCursor may have returned null because it hit EOF, wrap\n            // around and try again.\n            cursor = cm.getSearchCursor(query,\n                (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );\n            if (!cursor.find(prev)) {\n              return;\n            }\n          }\n        }\n        return cursor.from();\n      });\n    }\n    function clearSearchHighlight(cm) {\n      cm.removeOverlay(getSearchState(cm).getOverlay());\n      getSearchState(cm).setOverlay(null);\n    }\n    /**\n     * Check if pos is in the specified range, INCLUSIVE.\n     * Range can be specified with 1 or 2 arguments.\n     * If the first range argument is an array, treat it as an array of line\n     * numbers. Match pos against any of the lines.\n     * If the first range argument is a number,\n     *   if there is only 1 range argument, check if pos has the same line\n     *       number\n     *   if there are 2 range arguments, then check if pos is in between the two\n     *       range arguments.\n     */\n    function isInRange(pos, start, end) {\n      if (typeof pos != 'number') {\n        // Assume it is a cursor position. Get the line number.\n        pos = pos.line;\n      }\n      if (start instanceof Array) {\n        return inArray(pos, start);\n      } else {\n        if (end) {\n          return (pos >= start && pos <= end);\n        } else {\n          return pos == start;\n        }\n      }\n    }\n    function getUserVisibleLines(cm) {\n      var scrollInfo = cm.getScrollInfo();\n      var occludeToleranceTop = 6;\n      var occludeToleranceBottom = 10;\n      var from = cm.coordsChar({left:0, top: occludeToleranceTop + scrollInfo.top}, 'local');\n      var bottomY = scrollInfo.clientHeight - occludeToleranceBottom + scrollInfo.top;\n      var to = cm.coordsChar({left:0, top: bottomY}, 'local');\n      return {top: from.line, bottom: to.line};\n    }\n\n    // Ex command handling\n    // Care must be taken when adding to the default Ex command map. For any\n    // pair of commands that have a shared prefix, at least one of their\n    // shortNames must not match the prefix of the other command.\n    var defaultExCommandMap = [\n      { name: 'map' },\n      { name: 'nmap', shortName: 'nm' },\n      { name: 'vmap', shortName: 'vm' },\n      { name: 'unmap' },\n      { name: 'write', shortName: 'w' },\n      { name: 'undo', shortName: 'u' },\n      { name: 'redo', shortName: 'red' },\n      { name: 'set', shortName: 'set' },\n      { name: 'sort', shortName: 'sor' },\n      { name: 'substitute', shortName: 's' },\n      { name: 'nohlsearch', shortName: 'noh' },\n      { name: 'delmarks', shortName: 'delm' },\n      { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true }\n    ];\n    Vim.ExCommandDispatcher = function() {\n      this.buildCommandMap_();\n    };\n    Vim.ExCommandDispatcher.prototype = {\n      processCommand: function(cm, input) {\n        var vim = cm.state.vim;\n        var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n        var previousCommand = commandHistoryRegister.toString();\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        var inputStream = new CodeMirror.StringStream(input);\n        // update \": with the latest command whether valid or invalid\n        commandHistoryRegister.setText(input);\n        var params = {};\n        params.input = input;\n        try {\n          this.parseInput_(cm, inputStream, params);\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n        var commandName;\n        if (!params.commandName) {\n          // If only a line range is defined, move to the line.\n          if (params.line !== undefined) {\n            commandName = 'move';\n          }\n        } else {\n          var command = this.matchCommand_(params.commandName);\n          if (command) {\n            commandName = command.name;\n            if (command.excludeFromCommandHistory) {\n              commandHistoryRegister.setText(previousCommand);\n            }\n            this.parseCommandArgs_(inputStream, params, command);\n            if (command.type == 'exToKey') {\n              // Handle Ex to Key mapping.\n              for (var i = 0; i < command.toKeys.length; i++) {\n                CodeMirror.Vim.handleKey(cm, command.toKeys[i]);\n              }\n              return;\n            } else if (command.type == 'exToEx') {\n              // Handle Ex to Ex mapping.\n              this.processCommand(cm, command.toInput);\n              return;\n            }\n          }\n        }\n        if (!commandName) {\n          showConfirm(cm, 'Not an editor command \":' + input + '\"');\n          return;\n        }\n        try {\n          exCommands[commandName](cm, params);\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n      },\n      parseInput_: function(cm, inputStream, result) {\n        inputStream.eatWhile(':');\n        // Parse range.\n        if (inputStream.eat('%')) {\n          result.line = cm.firstLine();\n          result.lineEnd = cm.lastLine();\n        } else {\n          result.line = this.parseLineSpec_(cm, inputStream);\n          if (result.line !== undefined && inputStream.eat(',')) {\n            result.lineEnd = this.parseLineSpec_(cm, inputStream);\n          }\n        }\n\n        // Parse command name.\n        var commandMatch = inputStream.match(/^(\\w+)/);\n        if (commandMatch) {\n          result.commandName = commandMatch[1];\n        } else {\n          result.commandName = inputStream.match(/.*/)[0];\n        }\n\n        return result;\n      },\n      parseLineSpec_: function(cm, inputStream) {\n        var numberMatch = inputStream.match(/^(\\d+)/);\n        if (numberMatch) {\n          return parseInt(numberMatch[1], 10) - 1;\n        }\n        switch (inputStream.next()) {\n          case '.':\n            return cm.getCursor().line;\n          case '$':\n            return cm.lastLine();\n          case '\\'':\n            var mark = cm.state.vim.marks[inputStream.next()];\n            if (mark && mark.find()) {\n              return mark.find().line;\n            }\n            throw new Error('Mark not set');\n          default:\n            inputStream.backUp(1);\n            return undefined;\n        }\n      },\n      parseCommandArgs_: function(inputStream, params, command) {\n        if (inputStream.eol()) {\n          return;\n        }\n        params.argString = inputStream.match(/.*/)[0];\n        // Parse command-line arguments\n        var delim = command.argDelimiter || /\\s+/;\n        var args = trim(params.argString).split(delim);\n        if (args.length && args[0]) {\n          params.args = args;\n        }\n      },\n      matchCommand_: function(commandName) {\n        // Return the command in the command map that matches the shortest\n        // prefix of the passed in command name. The match is guaranteed to be\n        // unambiguous if the defaultExCommandMap's shortNames are set up\n        // correctly. (see @code{defaultExCommandMap}).\n        for (var i = commandName.length; i > 0; i--) {\n          var prefix = commandName.substring(0, i);\n          if (this.commandMap_[prefix]) {\n            var command = this.commandMap_[prefix];\n            if (command.name.indexOf(commandName) === 0) {\n              return command;\n            }\n          }\n        }\n        return null;\n      },\n      buildCommandMap_: function() {\n        this.commandMap_ = {};\n        for (var i = 0; i < defaultExCommandMap.length; i++) {\n          var command = defaultExCommandMap[i];\n          var key = command.shortName || command.name;\n          this.commandMap_[key] = command;\n        }\n      },\n      map: function(lhs, rhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            // Ex to Ex mapping\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToEx',\n              toInput: rhs.substring(1),\n              user: true\n            };\n          } else {\n            // Ex to key mapping\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToKey',\n              toKeys: parseKeyString(rhs),\n              user: true\n            };\n          }\n        } else {\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            // Key to Ex mapping.\n            var mapping = {\n              keys: parseKeyString(lhs),\n              type: 'keyToEx',\n              exArgs: { input: rhs.substring(1) },\n              user: true};\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          } else {\n            // Key to key mapping\n            var mapping = {\n              keys: parseKeyString(lhs),\n              type: 'keyToKey',\n              toKeys: parseKeyString(rhs),\n              user: true\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          }\n        }\n      },\n      unmap: function(lhs, ctx) {\n        var arrayEquals = function(a, b) {\n          if (a === b) return true;\n          if (a == null || b == null) return true;\n          if (a.length != b.length) return false;\n          for (var i = 0; i < a.length; i++) {\n            if (a[i] !== b[i]) return false;\n          }\n          return true;\n        };\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          // Ex to Ex or Ex to key mapping\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n            delete this.commandMap_[commandName];\n            return;\n          }\n        } else {\n          // Key to Ex or key to key mapping\n          var keys = parseKeyString(lhs);\n          for (var i = 0; i < defaultKeymap.length; i++) {\n            if (arrayEquals(keys, defaultKeymap[i].keys)\n                && defaultKeymap[i].context === ctx\n                && defaultKeymap[i].user) {\n              defaultKeymap.splice(i, 1);\n              return;\n            }\n          }\n        }\n        throw Error('No such mapping.');\n      }\n    };\n\n    // Converts a key string sequence of the form a<C-w>bd<Left> into Vim's\n    // keymap representation.\n    function parseKeyString(str) {\n      var key, match;\n      var keys = [];\n      while (str) {\n        match = (/<\\w+-.+?>|<\\w+>|./).exec(str);\n        if (match === null)break;\n        key = match[0];\n        str = str.substring(match.index + key.length);\n        keys.push(key);\n      }\n      return keys;\n    }\n\n    var exCommands = {\n      map: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 2) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);\n      },\n      nmap: function(cm, params) { this.map(cm, params, 'normal'); },\n      vmap: function(cm, params) { this.map(cm, params, 'visual'); },\n      unmap: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'No such mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.unmap(mapArgs[0], ctx);\n      },\n      move: function(cm, params) {\n        commandDispatcher.processCommand(cm, cm.state.vim, {\n            type: 'motion',\n            motion: 'moveToLineOrEdgeOfDocument',\n            motionArgs: { forward: false, explicitRepeat: true,\n              linewise: true },\n            repeatOverride: params.line+1});\n      },\n      set: function(cm, params) {\n        var setArgs = params.args;\n        if (!setArgs || setArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        var expr = setArgs[0].split('=');\n        var optionName = expr[0];\n        var value = expr[1];\n        var forceGet = false;\n\n        if (optionName.charAt(optionName.length - 1) == '?') {\n          // If post-fixed with ?, then the set is actually a get.\n          if (value) { throw Error('Trailing characters: ' + params.argString); }\n          optionName = optionName.substring(0, optionName.length - 1);\n          forceGet = true;\n        }\n        if (value === undefined && optionName.substring(0, 2) == 'no') {\n          // To set boolean options to false, the option name is prefixed with\n          // 'no'.\n          optionName = optionName.substring(2);\n          value = false;\n        }\n        var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n        if (optionIsBoolean && value == undefined) {\n          // Calling set with a boolean option sets it to true.\n          value = true;\n        }\n        if (!optionIsBoolean && !value || forceGet) {\n          var oldValue = getOption(optionName);\n          // If no value is provided, then we assume this is a get.\n          if (oldValue === true || oldValue === false) {\n            showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n          } else {\n            showConfirm(cm, '  ' + optionName + '=' + oldValue);\n          }\n        } else {\n          setOption(optionName, value);\n        }\n      },\n      registers: function(cm,params) {\n        var regArgs = params.args;\n        var registers = vimGlobalState.registerController.registers;\n        var regInfo = '----------Registers----------<br><br>';\n        if (!regArgs) {\n          for (var registerName in registers) {\n            var text = registers[registerName].toString();\n            if (text.length) {\n              regInfo += '\"' + registerName + '    ' + text + '<br>';\n            }\n          }\n        } else {\n          var registerName;\n          regArgs = regArgs.join('');\n          for (var i = 0; i < regArgs.length; i++) {\n            registerName = regArgs.charAt(i);\n            if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n              continue;\n            }\n            var register = registers[registerName] || new Register();\n            regInfo += '\"' + registerName + '    ' + register.toString() + '<br>';\n          }\n        }\n        showConfirm(cm, regInfo);\n      },\n      sort: function(cm, params) {\n        var reverse, ignoreCase, unique, number;\n        function parseArgs() {\n          if (params.argString) {\n            var args = new CodeMirror.StringStream(params.argString);\n            if (args.eat('!')) { reverse = true; }\n            if (args.eol()) { return; }\n            if (!args.eatSpace()) { return 'Invalid arguments'; }\n            var opts = args.match(/[a-z]+/);\n            if (opts) {\n              opts = opts[0];\n              ignoreCase = opts.indexOf('i') != -1;\n              unique = opts.indexOf('u') != -1;\n              var decimal = opts.indexOf('d') != -1 && 1;\n              var hex = opts.indexOf('x') != -1 && 1;\n              var octal = opts.indexOf('o') != -1 && 1;\n              if (decimal + hex + octal > 1) { return 'Invalid arguments'; }\n              number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n            }\n            if (args.eatSpace() && args.match(/\\/.*\\//)) { 'patterns not supported'; }\n          }\n        }\n        var err = parseArgs();\n        if (err) {\n          showConfirm(cm, err + ': ' + params.argString);\n          return;\n        }\n        var lineStart = params.line || cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        if (lineStart == lineEnd) { return; }\n        var curStart = Pos(lineStart, 0);\n        var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));\n        var text = cm.getRange(curStart, curEnd).split('\\n');\n        var numberRegex = (number == 'decimal') ? /(-?)([\\d]+)/ :\n           (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n           (number == 'octal') ? /([0-7]+)/ : null;\n        var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n        var numPart = [], textPart = [];\n        if (number) {\n          for (var i = 0; i < text.length; i++) {\n            if (numberRegex.exec(text[i])) {\n              numPart.push(text[i]);\n            } else {\n              textPart.push(text[i]);\n            }\n          }\n        } else {\n          textPart = text;\n        }\n        function compareFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); }\n          var anum = number && numberRegex.exec(a);\n          var bnum = number && numberRegex.exec(b);\n          if (!anum) { return a < b ? -1 : 1; }\n          anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n          bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n          return anum - bnum;\n        }\n        numPart.sort(compareFn);\n        textPart.sort(compareFn);\n        text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n        if (unique) { // Remove duplicate lines\n          var textOld = text;\n          var lastLine;\n          text = [];\n          for (var i = 0; i < textOld.length; i++) {\n            if (textOld[i] != lastLine) {\n              text.push(textOld[i]);\n            }\n            lastLine = textOld[i];\n          }\n        }\n        cm.replaceRange(text.join('\\n'), curStart, curEnd);\n      },\n      substitute: function(cm, params) {\n        if (!cm.getSearchCursor) {\n          throw new Error('Search feature not available. Requires searchcursor.js or ' +\n              'any other getSearchCursor implementation.');\n        }\n        var argString = params.argString;\n        var slashes = argString ? findUnescapedSlashes(argString) : [];\n        var replacePart = '';\n        if (slashes.length) {\n          if (slashes[0] !== 0) {\n            showConfirm(cm, 'Substitutions should be of the form ' +\n                ':s/pattern/replace/');\n            return;\n          }\n          var regexPart = argString.substring(slashes[0] + 1, slashes[1]);\n          var flagsPart;\n          var count;\n          var confirm = false; // Whether to confirm each replace.\n          if (slashes[1]) {\n            replacePart = argString.substring(slashes[1] + 1, slashes[2]);\n            if (getOption('pcre')) {\n              replacePart = unescapeRegexReplace(replacePart);\n            } else {\n              replacePart = translateRegexReplace(replacePart);\n            }\n            vimGlobalState.lastSubstituteReplacePart = replacePart;\n          }\n          if (slashes[2]) {\n            // After the 3rd slash, we can have flags followed by a space followed\n            // by count.\n            var trailing = argString.substring(slashes[2] + 1).split(' ');\n            flagsPart = trailing[0];\n            count = parseInt(trailing[1]);\n          }\n          if (flagsPart) {\n            if (flagsPart.indexOf('c') != -1) {\n              confirm = true;\n              flagsPart.replace('c', '');\n            }\n            regexPart = regexPart + '/' + flagsPart;\n          }\n        }\n        if (regexPart) {\n          // If regex part is empty, then use the previous query. Otherwise use\n          // the regex part as the new query.\n          try {\n            updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n              true /** smartCase */);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + regexPart);\n            return;\n          }\n        }\n        replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n        if (replacePart === undefined) {\n          showConfirm(cm, 'No previous substitute regular expression');\n          return;\n        }\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n        var lineEnd = params.lineEnd || lineStart;\n        if (count) {\n          lineStart = lineEnd;\n          lineEnd = lineStart + count - 1;\n        }\n        var startPos = clipCursorToContent(cm, Pos(lineStart, 0));\n        var cursor = cm.getSearchCursor(query, startPos);\n        doReplace(cm, confirm, lineStart, lineEnd, cursor, query, replacePart);\n      },\n      redo: CodeMirror.commands.redo,\n      undo: CodeMirror.commands.undo,\n      write: function(cm) {\n        if (CodeMirror.commands.save) {\n          // If a save command is defined, call it.\n          CodeMirror.commands.save(cm);\n        } else {\n          // Saves to text area if no save command is defined.\n          cm.save();\n        }\n      },\n      nohlsearch: function(cm) {\n        clearSearchHighlight(cm);\n      },\n      delmarks: function(cm, params) {\n        if (!params.argString || !trim(params.argString)) {\n          showConfirm(cm, 'Argument required');\n          return;\n        }\n\n        var state = cm.state.vim;\n        var stream = new CodeMirror.StringStream(trim(params.argString));\n        while (!stream.eol()) {\n          stream.eatSpace();\n\n          // Record the streams position at the beginning of the loop for use\n          // in error messages.\n          var count = stream.pos;\n\n          if (!stream.match(/[a-zA-Z]/, false)) {\n            showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n            return;\n          }\n\n          var sym = stream.next();\n          // Check if this symbol is part of a range\n          if (stream.match('-', true)) {\n            // This symbol is part of a range.\n\n            // The range must terminate at an alphabetic character.\n            if (!stream.match(/[a-zA-Z]/, false)) {\n              showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n              return;\n            }\n\n            var startMark = sym;\n            var finishMark = stream.next();\n            // The range must terminate at an alphabetic character which\n            // shares the same case as the start of the range.\n            if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n                isUpperCase(startMark) && isUpperCase(finishMark)) {\n              var start = startMark.charCodeAt(0);\n              var finish = finishMark.charCodeAt(0);\n              if (start >= finish) {\n                showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                return;\n              }\n\n              // Because marks are always ASCII values, and we have\n              // determined that they are the same case, we can use\n              // their char codes to iterate through the defined range.\n              for (var j = 0; j <= finish - start; j++) {\n                var mark = String.fromCharCode(start + j);\n                delete state.marks[mark];\n              }\n            } else {\n              showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n              return;\n            }\n          } else {\n            // This symbol is a valid mark, and is not part of a range.\n            delete state.marks[sym];\n          }\n        }\n      }\n    };\n\n    var exCommandDispatcher = new Vim.ExCommandDispatcher();\n\n    /**\n    * @param {CodeMirror} cm CodeMirror instance we are in.\n    * @param {boolean} confirm Whether to confirm each replace.\n    * @param {Cursor} lineStart Line to start replacing from.\n    * @param {Cursor} lineEnd Line to stop replacing at.\n    * @param {RegExp} query Query for performing matches with.\n    * @param {string} replaceWith Text to replace matches with. May contain $1,\n    *     $2, etc for replacing captured groups using Javascript replace.\n    */\n    function doReplace(cm, confirm, lineStart, lineEnd, searchCursor, query,\n        replaceWith) {\n      // Set up all the functions.\n      cm.state.vim.exMode = true;\n      var done = false;\n      var lastPos = searchCursor.from();\n      function replaceAll() {\n        cm.operation(function() {\n          while (!done) {\n            replace();\n            next();\n          }\n          stop();\n        });\n      }\n      function replace() {\n        var text = cm.getRange(searchCursor.from(), searchCursor.to());\n        var newText = text.replace(query, replaceWith);\n        searchCursor.replace(newText);\n      }\n      function next() {\n        var found = searchCursor.findNext();\n        if (!found) {\n          done = true;\n        } else if (isInRange(searchCursor.from(), lineStart, lineEnd)) {\n          cm.scrollIntoView(searchCursor.from(), 30);\n          cm.setSelection(searchCursor.from(), searchCursor.to());\n          lastPos = searchCursor.from();\n          done = false;\n        } else {\n          done = true;\n        }\n      }\n      function stop(close) {\n        if (close) { close(); }\n        cm.focus();\n        if (lastPos) {\n          cm.setCursor(lastPos);\n          var vim = cm.state.vim;\n          vim.exMode = false;\n          vim.lastHPos = vim.lastHSPos = lastPos.ch;\n        }\n      }\n      function onPromptKeyDown(e, _value, close) {\n        // Swallow all keys.\n        CodeMirror.e_stop(e);\n        var keyName = CodeMirror.keyName(e);\n        switch (keyName) {\n          case 'Y':\n            replace(); next(); break;\n          case 'N':\n            next(); break;\n          case 'A':\n            cm.operation(replaceAll); break;\n          case 'L':\n            replace();\n            // fall through and exit.\n          case 'Q':\n          case 'Esc':\n          case 'Ctrl-C':\n          case 'Ctrl-[':\n            stop(close);\n            break;\n        }\n        if (done) { stop(close); }\n      }\n\n      // Actually do replace.\n      next();\n      if (done) {\n        showConfirm(cm, 'No matches for ' + query.source);\n        return;\n      }\n      if (!confirm) {\n        replaceAll();\n        return;\n      }\n      showPrompt(cm, {\n        prefix: 'replace with <strong>' + replaceWith + '</strong> (y/n/a/q/l)',\n        onKeyDown: onPromptKeyDown\n      });\n    }\n\n    // Register Vim with CodeMirror\n    function buildVimKeyMap() {\n      /**\n       * Handle the raw key event from CodeMirror. Translate the\n       * Shift + key modifier to the resulting letter, while preserving other\n       * modifers.\n       */\n      function cmKeyToVimKey(key, modifier) {\n        var vimKey = key;\n        if (isUpperCase(vimKey) && modifier == 'Ctrl') {\n            vimKey = vimKey.toLowerCase();\n        }\n        if (modifier) {\n          // Vim will parse modifier+key combination as a single key.\n          vimKey = modifier.charAt(0) + '-' + vimKey;\n        }\n        var specialKey = ({Enter:'CR',Backspace:'BS',Delete:'Del'})[vimKey];\n        vimKey = specialKey ? specialKey : vimKey;\n        vimKey = vimKey.length > 1 ? '<'+ vimKey + '>' : vimKey;\n        return vimKey;\n      }\n\n      // Closure to bind CodeMirror, key, modifier.\n      function keyMapper(vimKey) {\n        return function(cm) {\n          CodeMirror.Vim.handleKey(cm, vimKey);\n        };\n      }\n\n      var cmToVimKeymap = {\n        'nofallthrough': true,\n        'style': 'fat-cursor'\n      };\n      function bindKeys(keys, modifier) {\n        for (var i = 0; i < keys.length; i++) {\n          var key = keys[i];\n          if (!modifier && key.length == 1) {\n            // Wrap all keys without modifiers with '' to identify them by their\n            // key characters instead of key identifiers.\n            key = \"'\" + key + \"'\";\n          }\n          var vimKey = cmKeyToVimKey(keys[i], modifier);\n          var cmKey = modifier ? modifier + '-' + key : key;\n          cmToVimKeymap[cmKey] = keyMapper(vimKey);\n        }\n      }\n      bindKeys(upperCaseAlphabet);\n      bindKeys(lowerCaseAlphabet);\n      bindKeys(upperCaseAlphabet, 'Ctrl');\n      bindKeys(specialSymbols);\n      bindKeys(specialSymbols, 'Ctrl');\n      bindKeys(numbers);\n      bindKeys(numbers, 'Ctrl');\n      bindKeys(specialKeys);\n      bindKeys(specialKeys, 'Ctrl');\n      return cmToVimKeymap;\n    }\n    CodeMirror.keyMap.vim = buildVimKeyMap();\n\n    function exitInsertMode(cm) {\n      var vim = cm.state.vim;\n      var macroModeState = vimGlobalState.macroModeState;\n      var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n      var isPlaying = macroModeState.isPlaying;\n      if (!isPlaying) {\n        cm.off('change', onChange);\n        CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n      }\n      if (!isPlaying && vim.insertModeRepeat > 1) {\n        // Perform insert mode repeat for commands like 3,a and 3,o.\n        repeatLastEdit(cm, vim, vim.insertModeRepeat - 1,\n            true /** repeatForInsert */);\n        vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n      }\n      delete vim.insertModeRepeat;\n      vim.insertMode = false;\n      cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);\n      cm.setOption('keyMap', 'vim');\n      cm.setOption('disableInput', true);\n      cm.toggleOverwrite(false); // exit replace mode if we were in it.\n      // update the \". register before exiting insert mode\n      insertModeChangeRegister.setText(macroModeState.lastInsertModeChanges.changes.join(''));\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (macroModeState.isRecording) {\n        logInsertModeChange(macroModeState);\n      }\n    }\n\n    CodeMirror.keyMap['vim-insert'] = {\n      // TODO: override navigation keys so that Esc will cancel automatic\n      // indentation from o, O, i_<CR>\n      'Esc': exitInsertMode,\n      'Ctrl-[': exitInsertMode,\n      'Ctrl-C': exitInsertMode,\n      'Ctrl-N': 'autocomplete',\n      'Ctrl-P': 'autocomplete',\n      'Enter': function(cm) {\n        var fn = CodeMirror.commands.newlineAndIndentContinueComment ||\n            CodeMirror.commands.newlineAndIndent;\n        fn(cm);\n      },\n      fallthrough: ['default']\n    };\n\n    CodeMirror.keyMap['vim-replace'] = {\n      'Backspace': 'goCharLeft',\n      fallthrough: ['vim-insert']\n    };\n\n    function executeMacroRegister(cm, vim, macroModeState, registerName) {\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      var keyBuffer = register.keyBuffer;\n      var imc = 0;\n      macroModeState.isPlaying = true;\n      macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n      for (var i = 0; i < keyBuffer.length; i++) {\n        var text = keyBuffer[i];\n        var match, key;\n        while (text) {\n          // Pull off one command key, which is either a single character\n          // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.\n          match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n          key = match[0];\n          text = text.substring(match.index + key.length);\n          CodeMirror.Vim.handleKey(cm, key);\n          if (vim.insertMode) {\n            repeatInsertModeChanges(\n                cm, register.insertModeChanges[imc++].changes, 1);\n            exitInsertMode(cm);\n          }\n        }\n      };\n      macroModeState.isPlaying = false;\n    }\n\n    function logKey(macroModeState, key) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushText(key);\n      }\n    }\n\n    function logInsertModeChange(macroModeState) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n      }\n    }\n\n    function logSearchQuery(macroModeState, query) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushSearchQuery(query);\n      }\n    }\n\n    /**\n     * Listens for changes made in insert mode.\n     * Should only be active in insert mode.\n     */\n    function onChange(_cm, changeObj) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!macroModeState.isPlaying) {\n        while(changeObj) {\n          lastChange.expectCursorActivityForChange = true;\n          if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n              || changeObj.origin === undefined /* only in testing */) {\n            var text = changeObj.text.join('\\n');\n            lastChange.changes.push(text);\n          }\n          // Change objects may be chained with next.\n          changeObj = changeObj.next;\n        }\n      }\n    }\n\n    /**\n    * Listens for any kind of cursor activity on CodeMirror.\n    */\n    function onCursorActivity(cm) {\n      var vim = cm.state.vim;\n      if (vim.insertMode) {\n        // Tracking cursor activity in insert mode (for macro support).\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        var lastChange = macroModeState.lastInsertModeChanges;\n        if (lastChange.expectCursorActivityForChange) {\n          lastChange.expectCursorActivityForChange = false;\n        } else {\n          // Cursor moved outside the context of an edit. Reset the change.\n          lastChange.changes = [];\n        }\n      } else if (cm.doc.history.lastSelOrigin == '*mouse') {\n        // Reset lastHPos if mouse click was done in normal mode.\n        vim.lastHPos = cm.doc.getCursor().ch;\n      }\n    }\n\n    /** Wrapper for special keys pressed in insert mode */\n    function InsertModeKey(keyName) {\n      this.keyName = keyName;\n    }\n\n    /**\n    * Handles raw key down events from the text area.\n    * - Should only be active in insert mode.\n    * - For recording deletes in insert mode.\n    */\n    function onKeyEventTargetKeyDown(e) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      var keyName = CodeMirror.keyName(e);\n      function onKeyFound() {\n        lastChange.changes.push(new InsertModeKey(keyName));\n        return true;\n      }\n      if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n        CodeMirror.lookupKey(keyName, ['vim-insert'], onKeyFound);\n      }\n    }\n\n    /**\n     * Repeats the last edit, which includes exactly 1 command and at most 1\n     * insert. Operator and motion commands are read from lastEditInputState,\n     * while action commands are read from lastEditActionCommand.\n     *\n     * If repeatForInsert is true, then the function was called by\n     * exitInsertMode to repeat the insert mode changes the user just made. The\n     * corresponding enterInsertMode call was made with a count.\n     */\n    function repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n      var macroModeState = vimGlobalState.macroModeState;\n      macroModeState.isPlaying = true;\n      var isAction = !!vim.lastEditActionCommand;\n      var cachedInputState = vim.inputState;\n      function repeatCommand() {\n        if (isAction) {\n          commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n        } else {\n          commandDispatcher.evalInput(cm, vim);\n        }\n      }\n      function repeatInsert(repeat) {\n        if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n          // For some reason, repeat cw in desktop VIM does not repeat\n          // insert mode changes. Will conform to that behavior.\n          repeat = !vim.lastEditActionCommand ? 1 : repeat;\n          var changeObject = macroModeState.lastInsertModeChanges;\n          // This isn't strictly necessary, but since lastInsertModeChanges is\n          // supposed to be immutable during replay, this helps catch bugs.\n          macroModeState.lastInsertModeChanges = {};\n          repeatInsertModeChanges(cm, changeObject.changes, repeat);\n          macroModeState.lastInsertModeChanges = changeObject;\n        }\n      }\n      vim.inputState = vim.lastEditInputState;\n      if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n        // o and O repeat have to be interlaced with insert repeats so that the\n        // insertions appear on separate lines instead of the last line.\n        for (var i = 0; i < repeat; i++) {\n          repeatCommand();\n          repeatInsert(1);\n        }\n      } else {\n        if (!repeatForInsert) {\n          // Hack to get the cursor to end up at the right place. If I is\n          // repeated in insert mode repeat, cursor will be 1 insert\n          // change set left of where it should be.\n          repeatCommand();\n        }\n        repeatInsert(repeat);\n      }\n      vim.inputState = cachedInputState;\n      if (vim.insertMode && !repeatForInsert) {\n        // Don't exit insert mode twice. If repeatForInsert is set, then we\n        // were called by an exitInsertMode call lower on the stack.\n        exitInsertMode(cm);\n      }\n      macroModeState.isPlaying = false;\n    };\n\n    function repeatInsertModeChanges(cm, changes, repeat) {\n      function keyHandler(binding) {\n        if (typeof binding == 'string') {\n          CodeMirror.commands[binding](cm);\n        } else {\n          binding(cm);\n        }\n        return true;\n      }\n      for (var i = 0; i < repeat; i++) {\n        for (var j = 0; j < changes.length; j++) {\n          var change = changes[j];\n          if (change instanceof InsertModeKey) {\n            CodeMirror.lookupKey(change.keyName, ['vim-insert'], keyHandler);\n          } else {\n            var cur = cm.getCursor();\n            cm.replaceRange(change, cur, cur);\n          }\n        }\n      }\n    }\n\n    resetVimGlobalState();\n    return vimApi;\n  };\n  // Initialize Vim and make it available as an API.\n  CodeMirror.Vim = Vim();\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/keymap/sublime.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/keymap/sublime.js",
            "module-type": "library",
            "text": "// A rough approximation of Sublime Text's keybindings\n// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"), require(\"../addon/search/searchcursor\"), require(\"../addon/edit/matchbrackets\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\", \"../addon/search/searchcursor\", \"../addon/edit/matchbrackets\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var map = CodeMirror.keyMap.sublime = {fallthrough: \"default\"};\n  var cmds = CodeMirror.commands;\n  var Pos = CodeMirror.Pos;\n  var ctrl = CodeMirror.keyMap[\"default\"] == CodeMirror.keyMap.pcDefault ? \"Ctrl-\" : \"Cmd-\";\n\n  // This is not exactly Sublime's algorithm. I couldn't make heads or tails of that.\n  function findPosSubword(doc, start, dir) {\n    if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1));\n    var line = doc.getLine(start.line);\n    if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0));\n    var state = \"start\", type;\n    for (var pos = start.ch, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) {\n      var next = line.charAt(dir < 0 ? pos - 1 : pos);\n      var cat = next != \"_\" && CodeMirror.isWordChar(next) ? \"w\" : \"o\";\n      if (cat == \"w\" && next.toUpperCase() == next) cat = \"W\";\n      if (state == \"start\") {\n        if (cat != \"o\") { state = \"in\"; type = cat; }\n      } else if (state == \"in\") {\n        if (type != cat) {\n          if (type == \"w\" && cat == \"W\" && dir < 0) pos--;\n          if (type == \"W\" && cat == \"w\" && dir > 0) { type = \"w\"; continue; }\n          break;\n        }\n      }\n    }\n    return Pos(start.line, pos);\n  }\n\n  function moveSubword(cm, dir) {\n    cm.extendSelectionsBy(function(range) {\n      if (cm.display.shift || cm.doc.extend || range.empty())\n        return findPosSubword(cm.doc, range.head, dir);\n      else\n        return dir < 0 ? range.from() : range.to();\n    });\n  }\n\n  cmds[map[\"Alt-Left\"] = \"goSubwordLeft\"] = function(cm) { moveSubword(cm, -1); };\n  cmds[map[\"Alt-Right\"] = \"goSubwordRight\"] = function(cm) { moveSubword(cm, 1); };\n\n  cmds[map[ctrl + \"Up\"] = \"scrollLineUp\"] = function(cm) {\n    var info = cm.getScrollInfo();\n    if (!cm.somethingSelected()) {\n      var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, \"local\");\n      if (cm.getCursor().line >= visibleBottomLine)\n        cm.execCommand(\"goLineUp\");\n    }\n    cm.scrollTo(null, info.top - cm.defaultTextHeight());\n  };\n  cmds[map[ctrl + \"Down\"] = \"scrollLineDown\"] = function(cm) {\n    var info = cm.getScrollInfo();\n    if (!cm.somethingSelected()) {\n      var visibleTopLine = cm.lineAtHeight(info.top, \"local\")+1;\n      if (cm.getCursor().line <= visibleTopLine)\n        cm.execCommand(\"goLineDown\");\n    }\n    cm.scrollTo(null, info.top + cm.defaultTextHeight());\n  };\n\n  cmds[map[\"Shift-\" + ctrl + \"L\"] = \"splitSelectionByLine\"] = function(cm) {\n    var ranges = cm.listSelections(), lineRanges = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      for (var line = from.line; line <= to.line; ++line)\n        if (!(to.line > from.line && line == to.line && to.ch == 0))\n          lineRanges.push({anchor: line == from.line ? from : Pos(line, 0),\n                           head: line == to.line ? to : Pos(line)});\n    }\n    cm.setSelections(lineRanges, 0);\n  };\n\n  map[\"Shift-Tab\"] = \"indentLess\";\n\n  cmds[map[\"Esc\"] = \"singleSelectionTop\"] = function(cm) {\n    var range = cm.listSelections()[0];\n    cm.setSelection(range.anchor, range.head, {scroll: false});\n  };\n\n  cmds[map[ctrl + \"L\"] = \"selectLine\"] = function(cm) {\n    var ranges = cm.listSelections(), extended = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      extended.push({anchor: Pos(range.from().line, 0),\n                     head: Pos(range.to().line + 1, 0)});\n    }\n    cm.setSelections(extended);\n  };\n\n  map[\"Shift-\" + ctrl + \"K\"] = \"deleteLine\";\n\n  function insertLine(cm, above) {\n    cm.operation(function() {\n      var len = cm.listSelections().length, newSelection = [], last = -1;\n      for (var i = 0; i < len; i++) {\n        var head = cm.listSelections()[i].head;\n        if (head.line <= last) continue;\n        var at = Pos(head.line + (above ? 0 : 1), 0);\n        cm.replaceRange(\"\\n\", at, null, \"+insertLine\");\n        cm.indentLine(at.line, null, true);\n        newSelection.push({head: at, anchor: at});\n        last = head.line + 1;\n      }\n      cm.setSelections(newSelection);\n    });\n  }\n\n  cmds[map[ctrl + \"Enter\"] = \"insertLineAfter\"] = function(cm) { insertLine(cm, false); };\n\n  cmds[map[\"Shift-\" + ctrl + \"Enter\"] = \"insertLineBefore\"] = function(cm) { insertLine(cm, true); };\n\n  function wordAt(cm, pos) {\n    var start = pos.ch, end = start, line = cm.getLine(pos.line);\n    while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start;\n    while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end;\n    return {from: Pos(pos.line, start), to: Pos(pos.line, end), word: line.slice(start, end)};\n  }\n\n  cmds[map[ctrl + \"D\"] = \"selectNextOccurrence\"] = function(cm) {\n    var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n    var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel;\n    if (CodeMirror.cmpPos(from, to) == 0) {\n      var word = wordAt(cm, from);\n      if (!word.word) return;\n      cm.setSelection(word.from, word.to);\n      fullWord = true;\n    } else {\n      var text = cm.getRange(from, to);\n      var query = fullWord ? new RegExp(\"\\\\b\" + text + \"\\\\b\") : text;\n      var cur = cm.getSearchCursor(query, to);\n      if (cur.findNext()) {\n        cm.addSelection(cur.from(), cur.to());\n      } else {\n        cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0));\n        if (cur.findNext())\n          cm.addSelection(cur.from(), cur.to());\n      }\n    }\n    if (fullWord)\n      cm.state.sublimeFindFullWord = cm.doc.sel;\n  };\n\n  var mirror = \"(){}[]\";\n  function selectBetweenBrackets(cm) {\n    var pos = cm.getCursor(), opening = cm.scanForBracket(pos, -1);\n    if (!opening) return;\n    for (;;) {\n      var closing = cm.scanForBracket(pos, 1);\n      if (!closing) return;\n      if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) {\n        cm.setSelection(Pos(opening.pos.line, opening.pos.ch + 1), closing.pos, false);\n        return true;\n      }\n      pos = Pos(closing.pos.line, closing.pos.ch + 1);\n    }\n  }\n\n  cmds[map[\"Shift-\" + ctrl + \"Space\"] = \"selectScope\"] = function(cm) {\n    selectBetweenBrackets(cm) || cm.execCommand(\"selectAll\");\n  };\n  cmds[map[\"Shift-\" + ctrl + \"M\"] = \"selectBetweenBrackets\"] = function(cm) {\n    if (!selectBetweenBrackets(cm)) return CodeMirror.Pass;\n  };\n\n  cmds[map[ctrl + \"M\"] = \"goToBracket\"] = function(cm) {\n    cm.extendSelectionsBy(function(range) {\n      var next = cm.scanForBracket(range.head, 1);\n      if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos;\n      var prev = cm.scanForBracket(range.head, -1);\n      return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head;\n    });\n  };\n\n  cmds[map[\"Shift-\" + ctrl + \"Up\"] = \"swapLineUp\"] = function(cm) {\n    var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], from = range.from().line - 1, to = range.to().line;\n      if (from > at) linesToMove.push(from, to);\n      else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;\n      at = to;\n    }\n    cm.operation(function() {\n      for (var i = 0; i < linesToMove.length; i += 2) {\n        var from = linesToMove[i], to = linesToMove[i + 1];\n        var line = cm.getLine(from);\n        cm.replaceRange(\"\", Pos(from, 0), Pos(from + 1, 0), \"+swapLine\");\n        if (to > cm.lastLine()) {\n          cm.replaceRange(\"\\n\" + line, Pos(cm.lastLine()), null, \"+swapLine\");\n          var sels = cm.listSelections(), last = sels[sels.length - 1];\n          var head = last.head.line == to ? Pos(to - 1) : last.head;\n          var anchor = last.anchor.line == to ? Pos(to - 1) : last.anchor;\n          cm.setSelections(sels.slice(0, sels.length - 1).concat([{head: head, anchor: anchor}]));\n        } else {\n          cm.replaceRange(line + \"\\n\", Pos(to, 0), null, \"+swapLine\");\n        }\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds[map[\"Shift-\" + ctrl + \"Down\"] = \"swapLineDown\"] = function(cm) {\n    var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var range = ranges[i], from = range.to().line + 1, to = range.from().line;\n      if (from < at) linesToMove.push(from, to);\n      else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;\n      at = to;\n    }\n    cm.operation(function() {\n      for (var i = linesToMove.length - 2; i >= 0; i -= 2) {\n        var from = linesToMove[i], to = linesToMove[i + 1];\n        var line = cm.getLine(from);\n        if (from == cm.lastLine())\n          cm.replaceRange(\"\", Pos(from - 1), Pos(from), \"+swapLine\");\n        else\n          cm.replaceRange(\"\", Pos(from, 0), Pos(from + 1, 0), \"+swapLine\");\n        cm.replaceRange(line + \"\\n\", Pos(to, 0), null, \"+swapLine\");\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n  map[ctrl + \"/\"] = \"toggleComment\";\n\n  cmds[map[ctrl + \"J\"] = \"joinLines\"] = function(cm) {\n    var ranges = cm.listSelections(), joined = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], from = range.from();\n      var start = from.line, end = range.to().line;\n      while (i < ranges.length - 1 && ranges[i + 1].from().line == end)\n        end = ranges[++i].to().line;\n      joined.push({start: start, end: end, anchor: !range.empty() && from});\n    }\n    cm.operation(function() {\n      var offset = 0, ranges = [];\n      for (var i = 0; i < joined.length; i++) {\n        var obj = joined[i];\n        var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), head;\n        for (var line = obj.start; line <= obj.end; line++) {\n          var actual = line - offset;\n          if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1);\n          if (actual < cm.lastLine()) {\n            cm.replaceRange(\" \", Pos(actual), Pos(actual + 1, /^\\s*/.exec(cm.getLine(actual + 1))[0].length));\n            ++offset;\n          }\n        }\n        ranges.push({anchor: anchor || head, head: head});\n      }\n      cm.setSelections(ranges, 0);\n    });\n  };\n\n  cmds[map[\"Shift-\" + ctrl + \"D\"] = \"duplicateLine\"] = function(cm) {\n    cm.operation(function() {\n      var rangeCount = cm.listSelections().length;\n      for (var i = 0; i < rangeCount; i++) {\n        var range = cm.listSelections()[i];\n        if (range.empty())\n          cm.replaceRange(cm.getLine(range.head.line) + \"\\n\", Pos(range.head.line, 0));\n        else\n          cm.replaceRange(cm.getRange(range.from(), range.to()), range.from());\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n  map[ctrl + \"T\"] = \"transposeChars\";\n\n  function sortLines(cm, caseSensitive) {\n    var ranges = cm.listSelections(), toSort = [], selected;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      if (range.empty()) continue;\n      var from = range.from().line, to = range.to().line;\n      while (i < ranges.length - 1 && ranges[i + 1].from().line == to)\n        to = range[++i].to().line;\n      toSort.push(from, to);\n    }\n    if (toSort.length) selected = true;\n    else toSort.push(cm.firstLine(), cm.lastLine());\n\n    cm.operation(function() {\n      var ranges = [];\n      for (var i = 0; i < toSort.length; i += 2) {\n        var from = toSort[i], to = toSort[i + 1];\n        var start = Pos(from, 0), end = Pos(to);\n        var lines = cm.getRange(start, end, false);\n        if (caseSensitive)\n          lines.sort();\n        else\n          lines.sort(function(a, b) {\n            var au = a.toUpperCase(), bu = b.toUpperCase();\n            if (au != bu) { a = au; b = bu; }\n            return a < b ? -1 : a == b ? 0 : 1;\n          });\n        cm.replaceRange(lines, start, end);\n        if (selected) ranges.push({anchor: start, head: end});\n      }\n      if (selected) cm.setSelections(ranges, 0);\n    });\n  }\n\n  cmds[map[\"F9\"] = \"sortLines\"] = function(cm) { sortLines(cm, true); };\n  cmds[map[ctrl + \"F9\"] = \"sortLinesInsensitive\"] = function(cm) { sortLines(cm, false); };\n\n  cmds[map[\"F2\"] = \"nextBookmark\"] = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) while (marks.length) {\n      var current = marks.shift();\n      var found = current.find();\n      if (found) {\n        marks.push(current);\n        return cm.setSelection(found.from, found.to);\n      }\n    }\n  };\n\n  cmds[map[\"Shift-F2\"] = \"prevBookmark\"] = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) while (marks.length) {\n      marks.unshift(marks.pop());\n      var found = marks[marks.length - 1].find();\n      if (!found)\n        marks.pop();\n      else\n        return cm.setSelection(found.from, found.to);\n    }\n  };\n\n  cmds[map[ctrl + \"F2\"] = \"toggleBookmark\"] = function(cm) {\n    var ranges = cm.listSelections();\n    var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []);\n    for (var i = 0; i < ranges.length; i++) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      var found = cm.findMarks(from, to);\n      for (var j = 0; j < found.length; j++) {\n        if (found[j].sublimeBookmark) {\n          found[j].clear();\n          for (var k = 0; k < marks.length; k++)\n            if (marks[k] == found[j])\n              marks.splice(k--, 1);\n          break;\n        }\n      }\n      if (j == found.length)\n        marks.push(cm.markText(from, to, {sublimeBookmark: true, clearWhenEmpty: false}));\n    }\n  };\n\n  cmds[map[\"Shift-\" + ctrl + \"F2\"] = \"clearBookmarks\"] = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear();\n    marks.length = 0;\n  };\n\n  cmds[map[\"Alt-F2\"] = \"selectBookmarks\"] = function(cm) {\n    var marks = cm.state.sublimeBookmarks, ranges = [];\n    if (marks) for (var i = 0; i < marks.length; i++) {\n      var found = marks[i].find();\n      if (!found)\n        marks.splice(i--, 0);\n      else\n        ranges.push({anchor: found.from, head: found.to});\n    }\n    if (ranges.length)\n      cm.setSelections(ranges, 0);\n  };\n\n  map[\"Alt-Q\"] = \"wrapLines\";\n\n  var mapK = CodeMirror.keyMap[\"sublime-Ctrl-K\"] = {auto: \"sublime\", nofallthrough: true};\n\n  map[ctrl + \"K\"] = function(cm) {cm.setOption(\"keyMap\", \"sublime-Ctrl-K\");};\n\n  function modifyWordOrSelection(cm, mod) {\n    cm.operation(function() {\n      var ranges = cm.listSelections(), indices = [], replacements = [];\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.empty()) { indices.push(i); replacements.push(\"\"); }\n        else replacements.push(mod(cm.getRange(range.from(), range.to())));\n      }\n      cm.replaceSelections(replacements, \"around\", \"case\");\n      for (var i = indices.length - 1, at; i >= 0; i--) {\n        var range = ranges[indices[i]];\n        if (at && CodeMirror.cmpPos(range.head, at) > 0) continue;\n        var word = wordAt(cm, range.head);\n        at = word.from;\n        cm.replaceRange(mod(word.word), word.from, word.to);\n      }\n    });\n  }\n\n  mapK[ctrl + \"Backspace\"] = \"delLineLeft\";\n\n  cmds[mapK[ctrl + \"K\"] = \"delLineRight\"] = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(\"\", ranges[i].anchor, Pos(ranges[i].to().line), \"+delete\");\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds[mapK[ctrl + \"U\"] = \"upcaseAtCursor\"] = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toUpperCase(); });\n  };\n  cmds[mapK[ctrl + \"L\"] = \"downcaseAtCursor\"] = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toLowerCase(); });\n  };\n\n  cmds[mapK[ctrl + \"Space\"] = \"setSublimeMark\"] = function(cm) {\n    if (cm.state.sublimeMark) cm.state.sublimeMark.clear();\n    cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n  };\n  cmds[mapK[ctrl + \"A\"] = \"selectToSublimeMark\"] = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) cm.setSelection(cm.getCursor(), found);\n  };\n  cmds[mapK[ctrl + \"W\"] = \"deleteToSublimeMark\"] = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) {\n      var from = cm.getCursor(), to = found;\n      if (CodeMirror.cmpPos(from, to) > 0) { var tmp = to; to = from; from = tmp; }\n      cm.state.sublimeKilled = cm.getRange(from, to);\n      cm.replaceRange(\"\", from, to);\n    }\n  };\n  cmds[mapK[ctrl + \"X\"] = \"swapWithSublimeMark\"] = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) {\n      cm.state.sublimeMark.clear();\n      cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n      cm.setCursor(found);\n    }\n  };\n  cmds[mapK[ctrl + \"Y\"] = \"sublimeYank\"] = function(cm) {\n    if (cm.state.sublimeKilled != null)\n      cm.replaceSelection(cm.state.sublimeKilled, null, \"paste\");\n  };\n\n  mapK[ctrl + \"G\"] = \"clearBookmarks\";\n  cmds[mapK[ctrl + \"C\"] = \"showInCenter\"] = function(cm) {\n    var pos = cm.cursorCoords(null, \"local\");\n    cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2);\n  };\n\n  cmds[map[\"Shift-Alt-Up\"] = \"selectLinesUpward\"] = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.head.line > cm.firstLine())\n          cm.addSelection(Pos(range.head.line - 1, range.head.ch));\n      }\n    });\n  };\n  cmds[map[\"Shift-Alt-Down\"] = \"selectLinesDownward\"] = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.head.line < cm.lastLine())\n          cm.addSelection(Pos(range.head.line + 1, range.head.ch));\n      }\n    });\n  };\n\n  function findAndGoTo(cm, forward) {\n    var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n    if (CodeMirror.cmpPos(from, to) == 0) {\n      var word = wordAt(cm, from);\n      if (!word.word) return;\n      from = word.from;\n      to = word.to;\n    }\n\n    var query = cm.getRange(from, to);\n    var cur = cm.getSearchCursor(query, forward ? to : from);\n\n    if (forward ? cur.findNext() : cur.findPrevious()) {\n      cm.setSelection(cur.from(), cur.to());\n    } else {\n      cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0)\n                                              : cm.clipPos(Pos(cm.lastLine())));\n      if (forward ? cur.findNext() : cur.findPrevious())\n        cm.setSelection(cur.from(), cur.to());\n      else if (word)\n        cm.setSelection(from, to);\n    }\n  };\n  cmds[map[ctrl + \"F3\"] = \"findUnder\"] = function(cm) { findAndGoTo(cm, true); };\n  cmds[map[\"Shift-\" + ctrl + \"F3\"] = \"findUnderPrevious\"] = function(cm) { findAndGoTo(cm,false); };\n\n  map[\"Shift-\" + ctrl + \"[\"] = \"fold\";\n  map[\"Shift-\" + ctrl + \"]\"] = \"unfold\";\n  mapK[ctrl + \"0\"] = mapK[ctrl + \"j\"] = \"unfoldAll\";\n\n  map[ctrl + \"I\"] = \"findIncremental\";\n  map[\"Shift-\" + ctrl + \"I\"] = \"findIncrementalReverse\";\n  map[ctrl + \"H\"] = \"replace\";\n  map[\"F3\"] = \"findNext\";\n  map[\"Shift-F3\"] = \"findPrev\";\n\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/keymap/emacs.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/codemirror/keymap/emacs.js",
            "module-type": "library",
            "text": "(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var Pos = CodeMirror.Pos;\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n  // Kill 'ring'\n\n  var killRing = [];\n  function addToRing(str) {\n    killRing.push(str);\n    if (killRing.length > 50) killRing.shift();\n  }\n  function growRingTop(str) {\n    if (!killRing.length) return addToRing(str);\n    killRing[killRing.length - 1] += str;\n  }\n  function getFromRing(n) { return killRing[killRing.length - (n ? Math.min(n, 1) : 1)] || \"\"; }\n  function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); }\n\n  var lastKill = null;\n\n  function kill(cm, from, to, mayGrow, text) {\n    if (text == null) text = cm.getRange(from, to);\n\n    if (mayGrow && lastKill && lastKill.cm == cm && posEq(from, lastKill.pos) && cm.isClean(lastKill.gen))\n      growRingTop(text);\n    else\n      addToRing(text);\n    cm.replaceRange(\"\", from, to, \"+delete\");\n\n    if (mayGrow) lastKill = {cm: cm, pos: from, gen: cm.changeGeneration()};\n    else lastKill = null;\n  }\n\n  // Boundaries of various units\n\n  function byChar(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"char\", true);\n  }\n\n  function byWord(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"word\", true);\n  }\n\n  function byLine(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"line\", cm.doc.sel.goalColumn);\n  }\n\n  function byPage(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"page\", cm.doc.sel.goalColumn);\n  }\n\n  function byParagraph(cm, pos, dir) {\n    var no = pos.line, line = cm.getLine(no);\n    var sawText = /\\S/.test(dir < 0 ? line.slice(0, pos.ch) : line.slice(pos.ch));\n    var fst = cm.firstLine(), lst = cm.lastLine();\n    for (;;) {\n      no += dir;\n      if (no < fst || no > lst)\n        return cm.clipPos(Pos(no - dir, dir < 0 ? 0 : null));\n      line = cm.getLine(no);\n      var hasText = /\\S/.test(line);\n      if (hasText) sawText = true;\n      else if (sawText) return Pos(no, 0);\n    }\n  }\n\n  function bySentence(cm, pos, dir) {\n    var line = pos.line, ch = pos.ch;\n    var text = cm.getLine(pos.line), sawWord = false;\n    for (;;) {\n      var next = text.charAt(ch + (dir < 0 ? -1 : 0));\n      if (!next) { // End/beginning of line reached\n        if (line == (dir < 0 ? cm.firstLine() : cm.lastLine())) return Pos(line, ch);\n        text = cm.getLine(line + dir);\n        if (!/\\S/.test(text)) return Pos(line, ch);\n        line += dir;\n        ch = dir < 0 ? text.length : 0;\n        continue;\n      }\n      if (sawWord && /[!?.]/.test(next)) return Pos(line, ch + (dir > 0 ? 1 : 0));\n      if (!sawWord) sawWord = /\\w/.test(next);\n      ch += dir;\n    }\n  }\n\n  function byExpr(cm, pos, dir) {\n    var wrap;\n    if (cm.findMatchingBracket && (wrap = cm.findMatchingBracket(pos, true))\n        && wrap.match && (wrap.forward ? 1 : -1) == dir)\n      return dir > 0 ? Pos(wrap.to.line, wrap.to.ch + 1) : wrap.to;\n\n    for (var first = true;; first = false) {\n      var token = cm.getTokenAt(pos);\n      var after = Pos(pos.line, dir < 0 ? token.start : token.end);\n      if (first && dir > 0 && token.end == pos.ch || !/\\w/.test(token.string)) {\n        var newPos = cm.findPosH(after, dir, \"char\");\n        if (posEq(after, newPos)) return pos;\n        else pos = newPos;\n      } else {\n        return after;\n      }\n    }\n  }\n\n  // Prefixes (only crudely supported)\n\n  function getPrefix(cm, precise) {\n    var digits = cm.state.emacsPrefix;\n    if (!digits) return precise ? null : 1;\n    clearPrefix(cm);\n    return digits == \"-\" ? -1 : Number(digits);\n  }\n\n  function repeated(cmd) {\n    var f = typeof cmd == \"string\" ? function(cm) { cm.execCommand(cmd); } : cmd;\n    return function(cm) {\n      var prefix = getPrefix(cm);\n      f(cm);\n      for (var i = 1; i < prefix; ++i) f(cm);\n    };\n  }\n\n  function findEnd(cm, by, dir) {\n    var pos = cm.getCursor(), prefix = getPrefix(cm);\n    if (prefix < 0) { dir = -dir; prefix = -prefix; }\n    for (var i = 0; i < prefix; ++i) {\n      var newPos = by(cm, pos, dir);\n      if (posEq(newPos, pos)) break;\n      pos = newPos;\n    }\n    return pos;\n  }\n\n  function move(by, dir) {\n    var f = function(cm) {\n      cm.extendSelection(findEnd(cm, by, dir));\n    };\n    f.motion = true;\n    return f;\n  }\n\n  function killTo(cm, by, dir) {\n    kill(cm, cm.getCursor(), findEnd(cm, by, dir), true);\n  }\n\n  function addPrefix(cm, digit) {\n    if (cm.state.emacsPrefix) {\n      if (digit != \"-\") cm.state.emacsPrefix += digit;\n      return;\n    }\n    // Not active yet\n    cm.state.emacsPrefix = digit;\n    cm.on(\"keyHandled\", maybeClearPrefix);\n    cm.on(\"inputRead\", maybeDuplicateInput);\n  }\n\n  var prefixPreservingKeys = {\"Alt-G\": true, \"Ctrl-X\": true, \"Ctrl-Q\": true, \"Ctrl-U\": true};\n\n  function maybeClearPrefix(cm, arg) {\n    if (!cm.state.emacsPrefixMap && !prefixPreservingKeys.hasOwnProperty(arg))\n      clearPrefix(cm);\n  }\n\n  function clearPrefix(cm) {\n    cm.state.emacsPrefix = null;\n    cm.off(\"keyHandled\", maybeClearPrefix);\n    cm.off(\"inputRead\", maybeDuplicateInput);\n  }\n\n  function maybeDuplicateInput(cm, event) {\n    var dup = getPrefix(cm);\n    if (dup > 1 && event.origin == \"+input\") {\n      var one = event.text.join(\"\\n\"), txt = \"\";\n      for (var i = 1; i < dup; ++i) txt += one;\n      cm.replaceSelection(txt);\n    }\n  }\n\n  function addPrefixMap(cm) {\n    cm.state.emacsPrefixMap = true;\n    cm.addKeyMap(prefixMap);\n    cm.on(\"keyHandled\", maybeRemovePrefixMap);\n    cm.on(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  function maybeRemovePrefixMap(cm, arg) {\n    if (typeof arg == \"string\" && (/^\\d$/.test(arg) || arg == \"Ctrl-U\")) return;\n    cm.removeKeyMap(prefixMap);\n    cm.state.emacsPrefixMap = false;\n    cm.off(\"keyHandled\", maybeRemovePrefixMap);\n    cm.off(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  // Utilities\n\n  function setMark(cm) {\n    cm.setCursor(cm.getCursor());\n    cm.setExtending(!cm.getExtending());\n    cm.on(\"change\", function() { cm.setExtending(false); });\n  }\n\n  function clearMark(cm) {\n    cm.setExtending(false);\n    cm.setCursor(cm.getCursor());\n  }\n\n  function getInput(cm, msg, f) {\n    if (cm.openDialog)\n      cm.openDialog(msg + \": <input type=\\\"text\\\" style=\\\"width: 10em\\\"/>\", f, {bottom: true});\n    else\n      f(prompt(msg, \"\"));\n  }\n\n  function operateOnWord(cm, op) {\n    var start = cm.getCursor(), end = cm.findPosH(start, 1, \"word\");\n    cm.replaceRange(op(cm.getRange(start, end)), start, end);\n    cm.setCursor(end);\n  }\n\n  function toEnclosingExpr(cm) {\n    var pos = cm.getCursor(), line = pos.line, ch = pos.ch;\n    var stack = [];\n    while (line >= cm.firstLine()) {\n      var text = cm.getLine(line);\n      for (var i = ch == null ? text.length : ch; i > 0;) {\n        var ch = text.charAt(--i);\n        if (ch == \")\")\n          stack.push(\"(\");\n        else if (ch == \"]\")\n          stack.push(\"[\");\n        else if (ch == \"}\")\n          stack.push(\"{\");\n        else if (/[\\(\\{\\[]/.test(ch) && (!stack.length || stack.pop() != ch))\n          return cm.extendSelection(Pos(line, i));\n      }\n      --line; ch = null;\n    }\n  }\n\n  function quit(cm) {\n    cm.execCommand(\"clearSearch\");\n    clearMark(cm);\n  }\n\n  // Actual keymap\n\n  var keyMap = CodeMirror.keyMap.emacs = {\n    \"Ctrl-W\": function(cm) {kill(cm, cm.getCursor(\"start\"), cm.getCursor(\"end\"));},\n    \"Ctrl-K\": repeated(function(cm) {\n      var start = cm.getCursor(), end = cm.clipPos(Pos(start.line));\n      var text = cm.getRange(start, end);\n      if (!/\\S/.test(text)) {\n        text += \"\\n\";\n        end = Pos(start.line + 1, 0);\n      }\n      kill(cm, start, end, true, text);\n    }),\n    \"Alt-W\": function(cm) {\n      addToRing(cm.getSelection());\n      clearMark(cm);\n    },\n    \"Ctrl-Y\": function(cm) {\n      var start = cm.getCursor();\n      cm.replaceRange(getFromRing(getPrefix(cm)), start, start, \"paste\");\n      cm.setSelection(start, cm.getCursor());\n    },\n    \"Alt-Y\": function(cm) {cm.replaceSelection(popFromRing(), \"around\", \"paste\");},\n\n    \"Ctrl-Space\": setMark, \"Ctrl-Shift-2\": setMark,\n\n    \"Ctrl-F\": move(byChar, 1), \"Ctrl-B\": move(byChar, -1),\n    \"Right\": move(byChar, 1), \"Left\": move(byChar, -1),\n    \"Ctrl-D\": function(cm) { killTo(cm, byChar, 1); },\n    \"Delete\": function(cm) { killTo(cm, byChar, 1); },\n    \"Ctrl-H\": function(cm) { killTo(cm, byChar, -1); },\n    \"Backspace\": function(cm) { killTo(cm, byChar, -1); },\n\n    \"Alt-F\": move(byWord, 1), \"Alt-B\": move(byWord, -1),\n    \"Alt-D\": function(cm) { killTo(cm, byWord, 1); },\n    \"Alt-Backspace\": function(cm) { killTo(cm, byWord, -1); },\n\n    \"Ctrl-N\": move(byLine, 1), \"Ctrl-P\": move(byLine, -1),\n    \"Down\": move(byLine, 1), \"Up\": move(byLine, -1),\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStart\",\n\n    \"Alt-V\": move(byPage, -1), \"Ctrl-V\": move(byPage, 1),\n    \"PageUp\": move(byPage, -1), \"PageDown\": move(byPage, 1),\n\n    \"Ctrl-Up\": move(byParagraph, -1), \"Ctrl-Down\": move(byParagraph, 1),\n\n    \"Alt-A\": move(bySentence, -1), \"Alt-E\": move(bySentence, 1),\n    \"Alt-K\": function(cm) { killTo(cm, bySentence, 1); },\n\n    \"Ctrl-Alt-K\": function(cm) { killTo(cm, byExpr, 1); },\n    \"Ctrl-Alt-Backspace\": function(cm) { killTo(cm, byExpr, -1); },\n    \"Ctrl-Alt-F\": move(byExpr, 1), \"Ctrl-Alt-B\": move(byExpr, -1),\n\n    \"Shift-Ctrl-Alt-2\": function(cm) {\n      cm.setSelection(findEnd(cm, byExpr, 1), cm.getCursor());\n    },\n    \"Ctrl-Alt-T\": function(cm) {\n      var leftStart = byExpr(cm, cm.getCursor(), -1), leftEnd = byExpr(cm, leftStart, 1);\n      var rightEnd = byExpr(cm, leftEnd, 1), rightStart = byExpr(cm, rightEnd, -1);\n      cm.replaceRange(cm.getRange(rightStart, rightEnd) + cm.getRange(leftEnd, rightStart) +\n                      cm.getRange(leftStart, leftEnd), leftStart, rightEnd);\n    },\n    \"Ctrl-Alt-U\": repeated(toEnclosingExpr),\n\n    \"Alt-Space\": function(cm) {\n      var pos = cm.getCursor(), from = pos.ch, to = pos.ch, text = cm.getLine(pos.line);\n      while (from && /\\s/.test(text.charAt(from - 1))) --from;\n      while (to < text.length && /\\s/.test(text.charAt(to))) ++to;\n      cm.replaceRange(\" \", Pos(pos.line, from), Pos(pos.line, to));\n    },\n    \"Ctrl-O\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"start\"); }),\n    \"Ctrl-T\": repeated(function(cm) {\n      cm.execCommand(\"transposeChars\");\n    }),\n\n    \"Alt-C\": repeated(function(cm) {\n      operateOnWord(cm, function(w) {\n        var letter = w.search(/\\w/);\n        if (letter == -1) return w;\n        return w.slice(0, letter) + w.charAt(letter).toUpperCase() + w.slice(letter + 1).toLowerCase();\n      });\n    }),\n    \"Alt-U\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toUpperCase(); });\n    }),\n    \"Alt-L\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toLowerCase(); });\n    }),\n\n    \"Alt-;\": \"toggleComment\",\n\n    \"Ctrl-/\": repeated(\"undo\"), \"Shift-Ctrl--\": repeated(\"undo\"),\n    \"Ctrl-Z\": repeated(\"undo\"), \"Cmd-Z\": repeated(\"undo\"),\n    \"Shift-Alt-,\": \"goDocStart\", \"Shift-Alt-.\": \"goDocEnd\",\n    \"Ctrl-S\": \"findNext\", \"Ctrl-R\": \"findPrev\", \"Ctrl-G\": quit, \"Shift-Alt-5\": \"replace\",\n    \"Alt-/\": \"autocomplete\",\n    \"Ctrl-J\": \"newlineAndIndent\", \"Enter\": false, \"Tab\": \"indentAuto\",\n\n    \"Alt-G\": function(cm) {cm.setOption(\"keyMap\", \"emacs-Alt-G\");},\n    \"Ctrl-X\": function(cm) {cm.setOption(\"keyMap\", \"emacs-Ctrl-X\");},\n    \"Ctrl-Q\": function(cm) {cm.setOption(\"keyMap\", \"emacs-Ctrl-Q\");},\n    \"Ctrl-U\": addPrefixMap\n  };\n\n  CodeMirror.keyMap[\"emacs-Ctrl-X\"] = {\n    \"Tab\": function(cm) {\n      cm.indentSelection(getPrefix(cm, true) || cm.getOption(\"indentUnit\"));\n    },\n    \"Ctrl-X\": function(cm) {\n      cm.setSelection(cm.getCursor(\"head\"), cm.getCursor(\"anchor\"));\n    },\n\n    \"Ctrl-S\": \"save\", \"Ctrl-W\": \"save\", \"S\": \"saveAll\", \"F\": \"open\", \"U\": repeated(\"undo\"), \"K\": \"close\",\n    \"Delete\": function(cm) { kill(cm, cm.getCursor(), bySentence(cm, cm.getCursor(), 1), true); },\n    auto: \"emacs\", nofallthrough: true, disableInput: true\n  };\n\n  CodeMirror.keyMap[\"emacs-Alt-G\"] = {\n    \"G\": function(cm) {\n      var prefix = getPrefix(cm, true);\n      if (prefix != null && prefix > 0) return cm.setCursor(prefix - 1);\n\n      getInput(cm, \"Goto line\", function(str) {\n        var num;\n        if (str && !isNaN(num = Number(str)) && num == num|0 && num > 0)\n          cm.setCursor(num - 1);\n      });\n    },\n    auto: \"emacs\", nofallthrough: true, disableInput: true\n  };\n\n  CodeMirror.keyMap[\"emacs-Ctrl-Q\"] = {\n    \"Tab\": repeated(\"insertTab\"),\n    auto: \"emacs\", nofallthrough: true\n  };\n\n  var prefixMap = {\"Ctrl-G\": clearPrefix};\n  function regPrefix(d) {\n    prefixMap[d] = function(cm) { addPrefix(cm, d); };\n    keyMap[\"Ctrl-\" + d] = function(cm) { addPrefix(cm, d); };\n    prefixPreservingKeys[\"Ctrl-\" + d] = true;\n  }\n  for (var i = 0; i < 10; ++i) regPrefix(String(i));\n  regPrefix(\"-\");\n});\n"
        },
        "$:/plugins/tiddlywiki/codemirror/readme": {
            "title": "$:/plugins/tiddlywiki/codemirror/readme",
            "text": "This plugin provides an enhanced text editor component based on [[CodeMirror|http://codemirror.net]]. It provides several advantages over the default browser text editor:\n\n* Code colouring for many languages (see [[the official documentation here|http://codemirror.net/mode/index.html]])\n* Auto closing brackets and tags\n* Folding brackets, comments, and tags\n* Auto-completion\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/codemirror]]\n"
        },
        "$:/plugins/tiddlywiki/codemirror/styles": {
            "title": "$:/plugins/tiddlywiki/codemirror/styles",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "/* Make the editor resize to fit its content */\n\n.CodeMirror {\n\theight: auto;\n\tborder: 1px solid #ddd;\n\tline-height: 1.5;\n\tfont-family: \"Monaco\", monospace;\n}\n\n.CodeMirror-scroll {\n\toverflow-x: auto;\n\toverflow-y: hidden;\t\n}\n"
        },
        "$:/plugins/tiddlywiki/codemirror/usage": {
            "title": "$:/plugins/tiddlywiki/codemirror/usage",
            "text": "! Setting ~CodeMirror Content Types\n\nYou can determine which tiddler content types are edited by the ~CodeMirror widget by creating or modifying special tiddlers whose prefix is comprised of the string `$:/config/EditorTypeMappings/` concatenated with the content type. The text of that tiddler gives the editor type to be used (eg, ''text'', ''bitmap'', ''codemirror'').\n\nThe current editor type mappings are shown in [[$:/ControlPanel]] under the \"Advanced\" tab.\n\n! ~CodeMirror Configuration\n\nYou can configure the ~CodeMirror plugin by creating a tiddler called [[$:/config/CodeMirror]] containing a JSON configuration object. The configuration tiddler must have its type field set to `application/json` to take effect.\n\nSee http://codemirror.net/ for details of available configuration options.\n\nFor example:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\",\n      \"$:/plugins/tiddlywiki/codemirror/keymap/vim.js\",\n      \"$:/plugins/tiddlywiki/codemirror/keymap/emacs.js\"\n  ],\n  \"configuration\": {\n      \"keyMap\": \"vim\",\n      \"matchBrackets\":true,\n      \"showCursorWhenSelecting\": true\n  }\n}\n```\n\n!! Basic working configuration\n\n# Create a tiddler called `$:/config/CodeMirror`\n\n# The type of the tiddler has to be set to `application/json`\n\n# The text of the tiddler is the following: \n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\"\n  ],\n  \"configuration\": {\n      \"matchBrackets\":true,\n      \"showCursorWhenSelecting\": true\n  }\n}\n\n```\n\n# You should see line numbers when editing a tiddler\n# When editing a tiddler, no matter what the type of the tiddler is set to, you should see matching brackets being highlighted whenever the cursor is next to one of them\n# If you edit a tiddler with the type `application/javascript` or `application/json` you should see the code being syntax highlighted\n\n!! Add HTML syntax highlighting\n\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js`\n## Add a field `module-type` and set it to ''library''\n## Set the field `type` to ''application/javascript''\n## Set the text field of the tiddler with the javascript code from this link : [[https://raw.githubusercontent.com/codemirror/CodeMirror/master/mode/xml/xml.js]]\n# Set the text field of the tiddler `$:/config/CodeMirror` to:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\"\n  ],\n  \"configuration\": {\n      \"showCursorWhenSelecting\": true,\n      \"matchBrackets\":true\n  }\n}\n```\n# Edit a tiddler with the type `text/html` and write some html code. You should see your code being coloured\n\n!! Add a non-existing language mode\n\nHere's an example of adding a new language mode - in this case, the language C.\n\n\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/mode/clike/clike.js`\n## Add a field `module-type` and set it to ''library''\n## Set the field `type` to ''application/javascript''\n## Set the text field of the tiddler with the javascript code from this link : [[https://raw.githubusercontent.com/codemirror/CodeMirror/master/mode/clike/clike.js]]\n# Set the text field of the tiddler `$:/config/CodeMirror` to:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/mode/clike/clike.js\"\n  ],\n  \"configuration\": {\n      \"showCursorWhenSelecting\": true\n  }\n}\n```\n\n# Add the correct ~EditorTypeMappings tiddler\n## Find the matching MIME type. If you go on the [[CodeMirror documentation for language modes|http://codemirror.net/mode/index.html]] you can see the [[documentation for the c-like mode|http://codemirror.net/mode/clike/index.html]]. In this documentation, at the end you will be told the MIME types defined. Here it's ''text/x-csrc''\n## Add the tiddler: `$:/config/EditorTypeMappings/text/x-csrc` and fill the text field with : ''codemirror''\n\nIf you edit a tiddler with the type `text/x-csrc` and write some code in C, you should see your text being coloured.\n\n!! Add matching tags\n\n# Add XML and HTML colouring\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/edit/matchtags.js`\n## Add a field `module-type` and set it to ''library''\n## Set the field `type` to ''application/javascript''\n## Set the text field of the tiddler with the javascript code from this link : [[http://codemirror.net/addon/edit/matchtags.js]]\n# Set the text field of the tiddler `$:/config/CodeMirror` to:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchtags.js\",\n      \"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js\"\n  ],\n  \"configuration\": {\n      \"showCursorWhenSelecting\": true,\n      \"matchTags\": {\"bothTags\": true},\n    \"extraKeys\": {\"Ctrl-J\": \"toMatchingTag\"}\n  }\n}\n```\n\nEdit a tiddler that has the type :`text/htm` and write this code:\n\n```\n<html>\n      <div id=\"click here and press CTRL+J\">\n      <ul>\n        <li>\n        </li>\n      </ul>\n   </div>\n</html>\n```\n\nIf you click on a tag and press CTRL+J, your cursor will select the matching tag. Supposedly, it should highlight the pair when clicking a tag. However, that part doesn't work.\n\n!! Adding closing tags\n\n# Add the xml mode (see \"Add XML and HTML colouring\")\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/edit/closetags.js`\n## Add a field `module-type` and set it to ''library''\n## Set the field `type` to ''application/javascript''\n## Set the text field of the tiddler with the javascript code from this link : [[http://codemirror.net/addon/edit/closetag.js]]\n\n# Set the text field of the tiddler `$:/config/CodeMirror` to:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/closetags.js\"\n  ],\n  \"configuration\": {\n      \"showCursorWhenSelecting\": true,\n      \"autoCloseTags\":true\n  }\n}\n```\n\nIf you edit a tiddler with the type`text/html` and write:\n\n```\n<html>\n```\n\nThen the closing tag ''</html>'' should automatically appear.\n\n!! Add closing brackets\n\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js`\n## Add a field `module-type` and set it to ''library''\n## Set the field `type` to ''application/javascript''\n## Set the text field of the tiddler with the javascript code from this link : [[http://codemirror.net/addon/edit/closebrackets.js]]\n# Set the text field of the tiddler `$:/config/CodeMirror` to:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js\"\n  ],\n\n  \"configuration\": {\n\n      \"showCursorWhenSelecting\": true,\n      \"matchBrackets\":true,\n      \"autoCloseBrackets\":true\n  }\n}\n```\n\n# If you try to edit any tiddler and write `if(` you should see the bracket closing itself automatically (you will get \"if()\"). It works with (), [], and {}\n# If you try and edit a tiddler with the type `application/javascript`, it will auto-close `()`,`[]`,`{}`,`''` and `\"\"`\n\n!! Adding folding tags\n\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/fold/foldcode.js`\n## Add a field `module-type` and set it to ''library''\n## Set the field `type` to ''application/javascript''\n## Set the text field of the tiddler with the javascript code from this link : [[http://codemirror.net/addon/fold/foldcode.js]]\n# Repeat the above process for the following tiddlers, but replace the code with the one from the given link:\n## Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js`, the code can be found here [[https://raw.githubusercontent.com/codemirror/CodeMirror/master/addon/fold/xml-fold.js]]\n## Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/fold/foldgutter.js`, the code can be found here [[http://codemirror.net/addon/fold/foldgutter.js]]\n# Create a tiddler `$:/plugins/tiddlywiki/codemirror/addon/fold/foldgutter.css`\n## Add the tag `$:/tags/Stylesheet`\n## Set the text field of the tiddler with the css code from this link : [[http://codemirror.net/addon/fold/foldgutter.css]]\n# Set the text field of the tiddler `$:/config/CodeMirror` to:\n\n```\n{\n  \"require\": [\n      \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n      \"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/fold/foldcode.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js\",\n      \"$:/plugins/tiddlywiki/codemirror/addon/fold/foldgutter.js\"\n  ],\n  \"configuration\": {\n      \"showCursorWhenSelecting\": true,\n      \"matchTags\": {\"bothTags\": true},\n      \"foldGutter\": true,\n      \"gutters\": [\"CodeMirror-linenumbers\", \"CodeMirror-foldgutter\"]\n  }\n}\n```\n\nNow if you type the below code in a tiddler with the type `text/html`:\n\n```\n<html>\n   <div>\n      <ul>\n\n      </ul>\n   </div>\n</html>\n```\n\nYou should see little arrows just next to the line numbers. Clicking on it will have the effect to fold the code (or unfold it).\n"
        }
    }
}
{
    "tiddlers": {
        "$:/plugins/tiddlywiki/highlight/highlight.js": {
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/highlight/highlight.js",
            "module-type": "library",
            "text": "var hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hljs\",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,\"&amp;\").replace(/</gm,\"&lt;\").replace(/>/gm,\"&gt;\")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=/\\blang(?:uage)?-([\\w-]+)\\b/i.exec(i))return w(t[1])?t[1]:\"no-highlight\";for(i=i.split(/\\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:\"start\",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:\"stop\",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:\"start\"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return\" \"+e.nodeName+'=\"'+n(e.value)+'\"'}f+=\"<\"+t(e)+Array.prototype.map.call(e.attributes,r).join(\"\")+\">\"}function u(e){f+=\"</\"+t(e)+\">\"}function c(e){(\"start\"==e.event?o:u)(e.node)}for(var s=0,f=\"\",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else\"start\"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),\"m\"+(e.cI?\"i\":\"\")+(r?\"g\":\"\"))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(\" \").forEach(function(e){var t=e.split(\"|\");u[t[0]]=[n,t[1]?Number(t[1]):1]})};\"string\"==typeof a.k?c(\"keyword\",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\\b\\w+\\b/,!0),i&&(a.bK&&(a.b=\"\\\\b(\"+a.bK.split(\" \").join(\"|\")+\")\\\\b\"),a.b||(a.b=/\\B|\\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\\B|\\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||\"\",a.eW&&i.tE&&(a.tE+=(a.e?\"|\":\"\")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push(\"self\"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?\"\\\\.?(\"+e.b+\")\\\\.?\":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join(\"|\"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?\"\":E.classPrefix,i='<span class=\"'+a,o=t?\"\":\"</span>\";return i+=e+'\">',i+n+o}function p(){if(!L.k)return n(y);var e=\"\",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e=\"string\"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,\"\",!0):\"\";e.rB?(k+=r,y=\"\"):e.eB?(k+=n(t)+r,y=\"\"):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=\"</span>\"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y=\"\",a.starts&&v(a.starts,\"\"),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(L.cN||\"<unnamed>\")+'\"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: \"'+e+'\"');s(N);var R,L=i||N,M={},k=\"\";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,\"\",!0)+k);var y=\"\",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+=\"</span>\");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf(\"Illegal\"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\\t)+)/gm,function(e,n){return n.replace(/\\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\\n/g,\"<br>\")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),t.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll(\"pre code\");Array.prototype.forEach.call(e,p)}}function v(){addEventListener(\"DOMContentLoaded\",b,!1),addEventListener(\"load\",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR=\"[a-zA-Z]\\\\w*\",e.UIR=\"[a-zA-Z_]\\\\w*\",e.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",e.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",e.BNR=\"\\\\b(0b[01]+)\",e.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",e.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0},e.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[e.BE]},e.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[e.BE]},e.PWM={b:/\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\\b/},e.C=function(n,t,r){var a=e.inherit({cN:\"comment\",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",r:0}),a},e.CLCM=e.C(\"//\",\"$\"),e.CBCM=e.C(\"/\\\\*\",\"\\\\*/\"),e.HCM=e.C(\"#\",\"$\"),e.NM={cN:\"number\",b:e.NR,r:0},e.CNM={cN:\"number\",b:e.CNR,r:0},e.BNM={cN:\"number\",b:e.BNR,r:0},e.CSSNM={cN:\"number\",b:e.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",r:0},e.RM={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[e.BE,{b:/\\[/,e:/\\]/,r:0,c:[e.BE]}]},e.TM={cN:\"title\",b:e.IR,r:0},e.UTM={cN:\"title\",b:e.UIR,r:0},e});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"header\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",r:0}]},{cN:\"blockquote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"`.+?`\"},{b:\"^( {4}|\t)\",e:\"$\",r:0}]},{cN:\"horizontal_rule\",b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,r:0},{cN:\"link_url\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"link_reference\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],r:10},{b:\"^\\\\[.+\\\\]:\",rB:!0,c:[{cN:\"link_reference\",b:\"\\\\[\",e:\"\\\\]:\",eB:!0,eE:!0,starts:{cN:\"link_url\",e:\"$\"}}]}]}});hljs.registerLanguage(\"ruby\",function(e){var c=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",r=\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",b={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={cN:\"value\",b:\"#<\",e:\">\"},n=[e.C(\"#\",\"$\",{c:[b]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[b],r:10}),e.C(\"^__END__\",\"\\\\n$\")],s={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:r},t={cN:\"string\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:r},d=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(n)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",r:0},{cN:\"symbol\",b:\":\",c:[t,{b:c}],r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[a,{cN:\"regexp\",c:[e.BE,s],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o=\"[>?]>\",l=\"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>\",u=\"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>\",N=[{b:/^\\s*=>/,cN:\"status\",starts:{e:\"$\",c:d}},{cN:\"prompt\",b:\"^(\"+o+\"|\"+l+\"|\"+u+\")\",starts:{e:\"$\",c:d}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage(\"makefile\",function(e){var a={cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]};return{aliases:[\"mk\",\"mak\"],c:[e.HCM,{b:/^\\w+\\s*\\W*=/,rB:!0,r:0,starts:{cN:\"constant\",e:/\\s*\\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:\"title\",b:/^[\\w]+:\\s*$/},{cN:\"phony\",b:/^\\.PHONY:/,e:/$/,k:\".PHONY\",l:/[\\.\\w]+/},{b:/^\\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage(\"json\",function(e){var t={literal:\"true false null\"},i=[e.QSM,e.CNM],l={cN:\"value\",e:\",\",eW:!0,eE:!0,c:i,k:t},c={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:!0,eE:!0,c:[e.BE],i:\"\\\\n\",starts:l}],i:\"\\\\S\"},n={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(l,{cN:null})],i:\"\\\\S\"};return i.splice(i.length,0,c,n),{c:i,k:t,i:\"\\\\S\"}});hljs.registerLanguage(\"xml\",function(t){var s=\"[A-Za-z0-9\\\\._:-]+\",c={b:/<\\?(php)?(?!\\w)/,e:/\\?>/,sL:\"php\"},e={eW:!0,i:/</,r:0,c:[c,{cN:\"attribute\",b:s,r:0},{b:\"=\",r:0,c:[{cN:\"value\",c:[c],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/[^\\s\\/>]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xsl\",\"plist\"],cI:!0,c:[{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},t.C(\"<!--\",\"-->\",{r:10}),{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[e],starts:{e:\"</style>\",rE:!0,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[e],starts:{e:\"</script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\"]}},c,{cN:\"pi\",b:/<\\?\\w+/,e:/\\?>/,r:10},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"title\",b:/[^ \\/><\\n\\t]+/,r:0},e]}]}});hljs.registerLanguage(\"css\",function(e){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\",a={cN:\"function\",b:c+\"\\\\(\",rB:!0,eE:!0,e:\"\\\\(\"},r={cN:\"rule\",b:/[A-Z\\_\\.\\-]+\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{cN:\"value\",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,r,{cN:\"id\",b:/\\#[A-Za-z0-9_-]+/},{cN:\"class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"attr_selector\",b:/\\[/,e:/\\]/,i:\"$\"},{cN:\"pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:\"tag\",b:c,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={cN:\"variable\",v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:o,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",r:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",r:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",r:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",r:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",r:5},{b:\"qw\\\\s+q\",e:\"q\",r:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],r:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],r:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],r:0}]},{cN:\"sub\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",r:5},{cN:\"operator\",b:\"-\\\\w\\\\b\",r:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=i,s.c=i,{aliases:[\"pl\"],k:t,c:i}});hljs.registerLanguage(\"cs\",function(e){var r=\"abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield\",t=e.IR+\"(<\"+e.IR+\">)?\";return{aliases:[\"csharp\"],k:r,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"xmlDocTag\",v:[{b:\"///\",r:0},{b:\"<!--|-->\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line region endregion pragma checksum\"},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},e.ASM,e.QSM,e.CNM,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[{cN:\"title\",b:\"[a-zA-Z](\\\\.?\\\\w)*\",r:0},e.CLCM,e.CBCM]},{bK:\"new return throw await\",r:0},{cN:\"function\",b:\"(\"+t+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"tag\",b:\"</?\",e:\">\"},{cN:\"keyword\",b:/\\w+/,r:0,k:{common:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,r:0,k:{literal:\"on off all\"},c:[{cN:\"sqbracket\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"cbracket\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"http\",function(t){return{aliases:[\"https\"],i:\"\\\\S\",c:[{cN:\"status\",b:\"^HTTP/[0-9\\\\.]+\",e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{cN:\"request\",b:\"^[A-Z]+ (.*?) HTTP/[0-9\\\\.]+$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{cN:\"string\",e:\"$\"}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"objectivec\",function(e){var t={cN:\"built_in\",b:\"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\\\w+\"},i={keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:i,l:o,i:\"</\",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"}]},{cN:\"preprocessor\",b:\"#\",e:\"$\",c:[{cN:\"title\",v:[{b:'\"',e:'\"'},{b:\"<\",e:\">\"}]}]},{cN:\"class\",b:\"(\"+n.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:n,l:o,c:[e.UTM]},{cN:\"variable\",b:\"\\\\.\"+e.UIR,r:0}]}});hljs.registerLanguage(\"python\",function(e){var r={cN:\"prompt\",b:/^(>>>|\\.\\.\\.) /},b={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)\"/,e:/\"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},a={cN:\"number\",r:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},l={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",r,a,b]};return{aliases:[\"py\",\"gyp\"],k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False\",built_in:\"Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:[r,a,b,e.HCM,{v:[{cN:\"function\",bK:\"def\",r:10},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,l]},{cN:\"decorator\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"java\",function(e){var a=e.UIR+\"(<\"+e.UIR+\">)?\",t=\"false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private\",c=\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",r={cN:\"number\",b:c,r:0};return{aliases:[\"jsp\"],k:t,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{r:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+a+\"\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,r:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:\"annotation\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},s={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]},a={cN:\"string\",b:/'/,e:/'/};return{aliases:[\"sh\",\"zsh\"],l:/-?[a-z\\.]+/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{cN:\"operator\",bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke\",e:/;/,eW:!0,k:{keyword:\"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null\",built_in:\"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{built_in:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{cN:\"url\",b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"title\",b:e.UIR,starts:b}],r:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"cpp\",function(t){var e={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},r={cN:\"string\",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?\"'}),{b:'(u8?|U)?R\"',e:'\"',c:[t.BE]},{b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"}]},s={cN:\"number\",v:[{b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},{b:t.CNR}]},i={cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line pragma ifdef ifndef\",c:[{b:/\\\\\\n/,r:0},{bK:\"include\",e:\"$\",c:[r,{cN:\"string\",b:\"<\",e:\">\",i:\"\\\\n\"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+\"\\\\s*\\\\(\",c={keyword:\"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong\",built_in:\"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf\",literal:\"true false nullptr NULL\"};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\"],k:c,i:\"</\",c:[e,t.CLCM,t.CBCM,s,r,i,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:c,c:[\"self\",e]},{b:t.IR+\"::\",k:c},{bK:\"new throw return else\",r:0},{cN:\"function\",b:\"(\"+t.IR+\"[\\\\*&\\\\s]+)+\"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\\w\\s\\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage(\"php\",function(e){var c={cN:\"variable\",b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},a={cN:\"preprocessor\",b:/<\\?(php)?|\\?>/},i={cN:\"string\",c:[e.BE,a],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:[\"php3\",\"php4\",\"php5\",\"php6\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.CLCM,e.HCM,e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"},a]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,i,t]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},i,t]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]*\",r:0},{b:/\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)/}]},{cN:\"property\",b:\"@\"+n},{b:\"`\",e:\"`\",eB:!0,eE:!0,sL:\"javascript\"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",o={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(t)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:t.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+i,e:\"[-=]>\",rB:!0,c:[s,o]},{b:/[:\\(,=]\\s*/,r:0,c:[{cN:\"function\",b:i,e:\"[-=]>\",rB:!0,c:[o]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[s]},s]},{cN:\"attribute\",b:n+\":\",e:\":\",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage(\"javascript\",function(e){return{aliases:[\"js\"],k:{keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},c:[{cN:\"pi\",r:10,b:/^\\s*['\"]use (strict|asm)['\"]/},e.ASM,e.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,{cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\"}]},e.CLCM,e.CBCM,{cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)\"},{b:\"\\\\b(0[oO][0-7]+)\"},{b:e.CNR}],r:0},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\\s*[);\\]]/,r:0,sL:\"xml\"}],r:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\\[|%/},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,r:0},{bK:\"import\",e:\"[;$]\",k:\"import from as\",c:[e.ASM,e.QSM]},{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]}],i:/#/}});hljs.registerLanguage(\"ini\",function(e){var c={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",r:10},{b:'\"\"\"',e:'\"\"\"',r:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[e.C(\";\",\"$\"),e.HCM,{cN:\"title\",b:/^\\s*\\[+/,e:/\\]+/},{cN:\"setting\",b:/^[a-z0-9\\[\\]_-]+\\s*=\\s*/,e:\"$\",c:[{cN:\"value\",eW:!0,k:\"on off true false yes no\",c:[{cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},c,{cN:\"number\",b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"chunk\",r:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"header\",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\\-\\-\\-/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+\\+\\+/,e:/$/},{b:/\\*{5}/,e:/\\*{5}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"change\",b:\"^\\\\!\",e:\"$\"}]}});\nexports.hljs = hljs;\n"
        },
        "$:/plugins/tiddlywiki/highlight/highlight.css": {
            "type": "text/css",
            "title": "$:/plugins/tiddlywiki/highlight/highlight.css",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "/*\n\nOriginal style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>\n\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  background: #f0f0f0;\n  -webkit-text-size-adjust: none;\n}\n\n.hljs,\n.hljs-subst,\n.hljs-tag .hljs-title,\n.nginx .hljs-title {\n  color: black;\n}\n\n.hljs-string,\n.hljs-title,\n.hljs-constant,\n.hljs-parent,\n.hljs-tag .hljs-value,\n.hljs-rule .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-name,\n.haml .hljs-symbol,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-template_tag,\n.django .hljs-variable,\n.smalltalk .hljs-class,\n.hljs-addition,\n.hljs-flow,\n.hljs-stream,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.apache .hljs-cbracket,\n.tex .hljs-command,\n.tex .hljs-special,\n.erlang_repl .hljs-function_or_atom,\n.asciidoc .hljs-header,\n.markdown .hljs-header,\n.coffeescript .hljs-attribute,\n.tp .hljs-variable {\n  color: #800;\n}\n\n.smartquote,\n.hljs-comment,\n.hljs-annotation,\n.diff .hljs-header,\n.hljs-chunk,\n.asciidoc .hljs-blockquote,\n.markdown .hljs-blockquote {\n  color: #888;\n}\n\n.hljs-number,\n.hljs-date,\n.hljs-regexp,\n.hljs-literal,\n.hljs-hexcolor,\n.smalltalk .hljs-symbol,\n.smalltalk .hljs-char,\n.go .hljs-constant,\n.hljs-change,\n.lasso .hljs-variable,\n.makefile .hljs-variable,\n.asciidoc .hljs-bullet,\n.markdown .hljs-bullet,\n.asciidoc .hljs-link_url,\n.markdown .hljs-link_url {\n  color: #080;\n}\n\n.hljs-label,\n.ruby .hljs-string,\n.hljs-decorator,\n.hljs-filter .hljs-argument,\n.hljs-localvars,\n.hljs-array,\n.hljs-attr_selector,\n.hljs-important,\n.hljs-pseudo,\n.hljs-pi,\n.haml .hljs-bullet,\n.hljs-doctype,\n.hljs-deletion,\n.hljs-envvar,\n.hljs-shebang,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in,\n.tex .hljs-formula,\n.erlang_repl .hljs-reserved,\n.hljs-prompt,\n.asciidoc .hljs-link_label,\n.markdown .hljs-link_label,\n.vhdl .hljs-attribute,\n.clojure .hljs-attribute,\n.asciidoc .hljs-attribute,\n.lasso .hljs-attribute,\n.coffeescript .hljs-property,\n.hljs-phony {\n  color: #88f;\n}\n\n.hljs-keyword,\n.hljs-id,\n.hljs-title,\n.hljs-built_in,\n.css .hljs-tag,\n.hljs-doctag,\n.smalltalk .hljs-class,\n.hljs-winutils,\n.bash .hljs-variable,\n.pf .hljs-variable,\n.apache .hljs-tag,\n.hljs-type,\n.hljs-typename,\n.tex .hljs-command,\n.asciidoc .hljs-strong,\n.markdown .hljs-strong,\n.hljs-request,\n.hljs-status,\n.tp .hljs-data,\n.tp .hljs-io {\n  font-weight: bold;\n}\n\n.asciidoc .hljs-emphasis,\n.markdown .hljs-emphasis,\n.tp .hljs-units {\n  font-style: italic;\n}\n\n.nginx .hljs-built_in {\n  font-weight: normal;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.lasso .markup,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n  opacity: 0.5;\n}\n"
        },
        "$:/plugins/tiddlywiki/highlight/highlightblock.js": {
            "text": "/*\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\ntype: application/javascript\nmodule-type: widget\n\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CodeBlockWidget = require(\"$:/core/modules/widgets/codeblock.js\").codeblock;\n\nvar hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n\nhljs.configure({tabReplace: \"    \"});\t\n\nCodeBlockWidget.prototype.postRender = function() {\n\tvar domNode = this.domNodes[0];\n\tif($tw.browser && this.document !== $tw.fakeDocument && this.language) {\n\t\tdomNode.className = this.language.toLowerCase();\n\t\thljs.highlightBlock(domNode);\n\t} else if(!$tw.browser && this.language && this.language.indexOf(\"/\") === -1 ){\n\t\ttry {\n\t\t\tdomNode.className = this.language.toLowerCase() + \" hljs\";\n\t\t\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(this.language, this.getAttribute(\"code\")).value);\n\t\t}\n\t\tcatch(err) {\n\t\t\t// Can't easily tell if a language is registered or not in the packed version of hightlight.js,\n\t\t\t// so we silently fail and the codeblock remains unchanged\n\t\t}\n\t}\t\n};\n\n})();\n",
            "title": "$:/plugins/tiddlywiki/highlight/highlightblock.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/plugins/tiddlywiki/highlight/license": {
            "title": "$:/plugins/tiddlywiki/highlight/license",
            "type": "text/plain",
            "text": "Copyright (c) 2006, Ivan Sagalaev\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of highlight.js nor the names of its contributors\n      may be used to endorse or promote products derived from this software\n      without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
        },
        "$:/plugins/tiddlywiki/highlight/readme": {
            "title": "$:/plugins/tiddlywiki/highlight/readme",
            "text": "This plugin provides syntax highlighting of code blocks using v8.8.0 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\n\n! Usage\n\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\n\nThe language can optionally be specified after the opening triple braces:\n\n<$codeblock code=\"\"\"```css\n * { margin: 0; padding: 0; } /* micro reset */\n\nhtml { font-size: 62.5%; }\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\nh1   { font-size: 24px; font-size: 2.4rem; } /* =24px */\n```\"\"\"/>\n\nIf no language is specified highlight.js will attempt to automatically detect the language.\n\n! Built-in Language Brushes\n\nThe plugin includes support for the following languages (referred to as \"brushes\" by highlight.js):\n\n* apache\n* bash\n* coffeescript\n* cpp\n* cs\n* css\n* diff\n* http\n* ini\n* java\n* javascript\n* json\n* makefile\n* markdown\n* nginx\n* objectivec\n* perl\n* php\n* python\n* ruby\n* sql\n* xml\n\n"
        },
        "$:/plugins/tiddlywiki/highlight/styles": {
            "title": "$:/plugins/tiddlywiki/highlight/styles",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": ".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:teal}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:navy;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:teal}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}"
        },
        "$:/plugins/tiddlywiki/highlight/usage": {
            "title": "$:/plugins/tiddlywiki/highlight/usage",
            "text": "! Usage\n\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\n\n```\n ```js\n var a = b + c; // Highlighted as JavaScript\n ```\n```\n! Adding Themes\n\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\n\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\n"
        }
    }
}
en världen av orkidéer
[img width=180 [iconOrchid.svg]] Orchidelirium


{
    "tiddlers": {
        "$:/info/browser": {
            "title": "$:/info/browser",
            "text": "no"
        },
        "$:/info/node": {
            "title": "$:/info/node",
            "text": "yes"
        }
    }
}
$:/themes/tiddlywiki/vanilla
{
    "tiddlers": {
        "$:/themes/tiddlywiki/snowwhite/base": {
            "title": "$:/themes/tiddlywiki/snowwhite/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/vanilla/themetweaks": {
            "title": "$:/themes/tiddlywiki/vanilla/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "Theme Tweaks",
            "text": "\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\">\n<$link to=\"\">\n(none)\n</$link>\n<hr>\n<$list filter=\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[sort[title]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\">Scroll with tiddlers</option>\n<option value=\"fixed\">Fixed to window</option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\">Auto</option>\n<option value=\"cover\">Cover</option>\n<option value=\"contain\">Contain</option>\n</$select>\n\\end\n\nYou can tweak certain aspects of the ''Vanilla'' theme.\n\n! Options\n\n|[[Sidebar layout|$:/themes/tiddlywiki/vanilla/options/sidebarlayout]] |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\">Fixed story, fluid sidebar</option><option value=\"fluid-fixed\">Fluid story, fixed sidebar</option></$select> |\n|[[Sticky titles|$:/themes/tiddlywiki/vanilla/options/stickytitles]]<br>//Causes tiddler titles to \"stick\" to the top of the browser window. Caution: Does not work at all with Chrome, and causes some layout issues in Firefox// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">No</option><option value=\"yes\">Yes</option></$select> |\n\n! Settings\n\n|[[Font family|$:/themes/tiddlywiki/vanilla/settings/fontfamily]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|[[Code font family|$:/themes/tiddlywiki/vanilla/settings/codefontfamily]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|[[Page background image|$:/themes/tiddlywiki/vanilla/settings/backgroundimage]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|[[Page background image attachment |$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment]] |<<backgroundimageattachment-dropdown>> | |\n|[[Page background image size |$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize]] |<<backgroundimagesize-dropdown>> | |\n\n! Sizes\n\n|[[Font size|$:/themes/tiddlywiki/vanilla/metrics/fontsize]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|[[Line height|$:/themes/tiddlywiki/vanilla/metrics/lineheight]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|[[Font size for tiddler body|$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|[[Line height for tiddler body|$:/themes/tiddlywiki/vanilla/metrics/bodylineheight]] |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|[[Story left position|$:/themes/tiddlywiki/vanilla/metrics/storyleft]]<br>//how far the left margin of the story river<br>(tiddler area) is from the left of the page// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|[[Story top position|$:/themes/tiddlywiki/vanilla/metrics/storytop]]<br>//how far the top margin of the story river<br>is from the top of the page// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|[[Story right|$:/themes/tiddlywiki/vanilla/metrics/storyright]]<br>//how far the left margin of the sidebar <br>is from the left of the page// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|[[Story width|$:/themes/tiddlywiki/vanilla/metrics/storywidth]]<br>//the overall width of the story river// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|[[Tiddler width|$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth]]<br>//within the story river//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|[[Sidebar breakpoint|$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint]]<br>//the minimum page width at which the story<br>river and sidebar will appear side by side// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|[[Sidebar width|$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth]]<br>//the width of the sidebar in fluid-fixed layout// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
        },
        "$:/themes/tiddlywiki/vanilla/base": {
            "title": "$:/themes/tiddlywiki/vanilla/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: pre;\n\twhite-space: pre-wrap;\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n    white-space: pre-wrap;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: normal;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n    width: calc(100% + 2px);\n    margin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n    top: 6px;\n    bottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t    width: calc(100% + 59px);\n    }\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t    font-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 300;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour tag-foreground>>;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: auto;\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 28px;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-tiddler-missing .tc-title {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg  {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor, .tc-tiddler-frame textarea.tc-edit-texteditor {\n\twidth: 100%;\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n  fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n  fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n  fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n  fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n  fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n  fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n  fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n  fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n  fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 48%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 3px 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n.tc-tiddler-preview-edit {\n\twidth: 48%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg  {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down-language-chooser img {\n\twidth: 2em;\n\tvertical-align: baseline;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\t\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n    padding: 0 7px 0 7px;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical  {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical  {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical  {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tdisplay: inline;\n\twidth: auto;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: block;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground-colour: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-plugin-info-chunk h1 {\n\tfont-size: 1em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk h2 {\n\tfont-size: 0.8em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk div {\n\tfont-size: 0.7em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 1em 1em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder: 1px solid <<colour table-border>>;\n}\n\n.tc-chooser-item {\n\tborder: 8px;\n\tpadding: 2px 4px;\n}\n\n.tc-chooser-item a.tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n}\n\n.tc-chooser-item a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n    text-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n    min-width: 100%;\n    min-height: 100%;\n    max-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
            "text": "15px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
            "text": "22px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
            "text": "14px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
            "text": "20px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storytop": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyright": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
            "text": "686px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
            "text": "960px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
            "text": "350px"
        },
        "$:/themes/tiddlywiki/vanilla/options/stickytitles": {
            "title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
            "text": "no"
        },
        "$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
            "title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
            "text": "fixed-fluid"
        },
        "$:/themes/tiddlywiki/vanilla/reset": {
            "title": "$:/themes/tiddlywiki/vanilla/reset",
            "type": "text/plain",
            "text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
            "text": "\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", \"DejaVu Sans\", sans-serif"
        },
        "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
            "text": "Monaco, Consolas, \"Lucida Console\", \"DejaVu Sans Mono\", monospace"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
            "text": "fixed"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
            "text": "auto"
        },
        "$:/themes/tiddlywiki/vanilla/sticky": {
            "title": "$:/themes/tiddlywiki/vanilla/sticky",
            "text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n``\n</$reveal>\n"
        }
    }
}
fluid-fixed
yes

































!Allmänt och utbredning
Släktet //Lockhartia//, förkortat //Lhta.//, är det enda släktet inom allinsen Lockhartia och innehåller <$view field="count"/> accepterade arter som växer från södra Mexiko och Västindien till södra Brasilien och ön Trinidad. De växer i varma, fuktiga skogar från havsnivå upptill 2600 meters höjd.
Namnet på detta släkte är en hyllning till den engelska botanisten Sir David Lockhart, trädgårdsmästare i Kew och senare föreståndare för Royal Botanic Gardens i Trinidad från 1818 fram till sin död 1846. 

!Utseende
De är sinsemellan väldigt likartade men är generellt ett av de lättaste släktena att känna igen på utseendet. De saknar pseudobulber och växer krypande, hängande, med de korta överlappande, trekantiga bladen i två rader längs stammen, bildande ett platt fjäderliknade bälte. De små, oncidiumliknande blommorna kommer i blomställningar med några få blommor från mellan de tillplattade bladen med början vid toppen av stammen. De blommorna är oftast gula med röda fläckar, eller ibland nästan vitt, med sepaler och petaler är fria och utspridda.

!Skötsel
De föredrar ljusa, svala till varma växtförhållanden med en jämn tillförsel av vatten och gödning under tillväxten. De har behov av en vintervila under hösten med mindre fukt och näring, fram till dess den nya tillväxten börjar under våren. De odlas bäst monterade eller i små mossfyllda korgar. Eller om de är mer upprättstående, i små krukor i en luftig kompost av trädormbunke eller liknande. De förökas förhållandevis lätt genom delning, en ny bulb bildar nya rötter om den hålls varmt och fuktigt utan att bli helt blöt.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Oncidiinae

''Tribus'': Lockhartia

''Typart''
//Lhta. elegans// Hook. (1827) synonym med //[[Lhta. imbricata|bb9752ce-5608-4fe9-9215-f68353ebde25]]// Hoehne (1952)

''Uttal''
lok-HART-ee-ah

!Synonymer
__Heterotypic Synonyms:__
//Fernandezia// Lindl. (1833) nom. illeg.
//Lockhartiopsis// Archila (1999) nom. inval.
//Neobennettia// Senghas (2001)

!Rekommenderad läsning
[[Geoscience Australia|http://www.ga.gov.au/corporate_data/81297/Jou1991_v12_n4_p297.pdf]]
[[Wikipedia|http://en.wikipedia.org/wiki/Lockhartia]]
[[Woodstream Orchids|http://www.woodstreamorchids.com/lockhartia.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Lockhartia]]

















!Allmänt och utbredning
Denna miniatyrart är endemisk för bergskedjan Anderna i nordöstra Ecuador och Peru.
Artepeitetet anspelar på den mycket djupt kluvna läppen, "den delade sepalen".

!Utseende
Den saknar pseudobulber utan de ovalt avlånga bladen kommer på en lång stjälk från en underjordisk horisontell stam. Under sommaren kommer en fyra cm lång blomstängel på ovansidan av bladet som bär en ensam blomma, med en gul grundfärg och översållad av purpurprickar. Läppen är djupt kluven i två långa, smala flikar.

!Skötsel
Den är ovanlig i odling men utgör egentligen inga större problem. Om den får en skuggig eller ljus halvskuggig plats med hög luftfuktighet och svala till intermediära växtförhållanden frodas den och bildar lätt keikis.
Den kan odlas i en mix av barkkompost, perlite och en hög andel sphagnum.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/resschizosepala.htm]]























!Allmänt och utbredning
Det är en terrestrisk eller epifytisk art som är endemisk för Andernas molnskogar. Den växer i gräs- och buskbeklädda sluttningar i de höga bergsskogarna i sydöstra Peru nära Machu Picchu, mellan 2200 och 4000 meters höjd.
I den miljön skyddas bladen från full sol bara av gräsen runt omkring. Arten är medlem av undersektionen Coccineae, och har de största blommorna inom släktet. På Quechua, som är ett av språken som talas av indianbefolkningen i Sydamerika, heter den ''waqanqi'' som betyder "du kommer att gråta" (eng. ''you will cry''). Om man sedan väljer att tro att det är för blommans skönhet, eller för att plantans odlingsbetingelser gör att det kräver lite mer än vad som normalt kan tillgodoses i en lägenhet, är upp till var och en att avgöra ;-)

!Utseende
Den har inga pseudobulber, utan den krypande, underjordiska stammen producerar klungor av blad. De avlångt äggformade bladen blir drygt 30 cm långa, och tre cm breda.
Blomstängeln utvecklas från skyddsbladen vid basen av bladen. Stängeln blir fyra dm hög med en, eller flera ibland, 20 cm stora, gnistrande rödorange blommor, helt täckt med små, små purpurfärgade hår. De små håren gör att blomman verkar ändra färg beroende på vinkeln den studeras ur.
Undersidan av blomman är gul med mörk nervatur. Sepalerna är de mest uppseendeväckande på plantan, med långa smala spetsar. Sepalerna kan vara extremt variabla i storlek, form, textur och färg. Vanligtvis är de förenade i en tub, men de kan också vara fria. Petalerna däremot är små, i regel stor som könspelaren. Blommorna kan slå ut simultant eller successivt under våren till sommaren och håller för det mesta ganska länge.

!Skötsel
Eftersom de kommer från högt upp i Anderna, föredrar den en kall och fuktig växtplats. Den tycker inte om att bli placerad för varmt. Däremot behöver den gott om ljus för att blomma ordentligt. Med för dåligt ljus tenderar blomstängeln att bli för svag, och blommorna hänger.
Sommaren kan innebära ett problem för växten, eftersom den föredrar skugga och lägre temperaturer framför starkt solsken och värme. Om den kan hållas sval och skuggad under sommaren växer den snabbt i storlek och bildar snart en praktfull planta, som kan slå ut med flera enastående blommor på en gång.
I regel fördrar alla arter i släktet att växa i stora klumpar och de bör inte delas för ofta. Vid omplantering, dela i stora bitar och plantera i relativt små krukor, när plantan är i aktiv tillväxt. Komposten kan variera från levande vitmossa till olika fina barkblandningar. Huvudsaken är att dräneringen är god, och att blandningen behåller fukt utan att vara helt blöt.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/masveitchiana.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Masdevallia_veitchiana]]
[[the Orchid Photo page|http://www.orchidworks.com/orchids/pleurothallids/book098c.htm]]
[[Orchids of the Pleurothallis Alliance|http://www.pleurothallids.com/masdevallia_veitchiana.htm]]
[[Dallas Judging Center|http://www.djc-aos.org/Species%20Month%20Archive/veitch1.doc]] Word-doc






































!Allmänt och utbredning
Det är en ny art från den kinesiska provinsen Yunnan som beskrivs med fotografier och illustration av Z.J.Liu, Olaf Gruss och L.J.Chen 2011. Den nya arten //Paph. cornutum// är nära relaterad till //[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]// även om det finns många skillnader mellan dem.

!Utseende
Den dorsala sepalen är i mitten mörkt purpurfärgad, petalerna brunlila och staminoiden har hornformiga utskott vid basen.

!Skötsel
Plantera i väldränerad mix av medelgrov barkkompost och perlit med en liten tillsats av kalk. Vattna regelbundet ungefär var fjärde till var femte dag.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphcornuatum.htm]] 2015-04-24
[[Orchid Japan|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu56%20.html]] 2015-04-24

;Zhong-Jian Liu, Olaf Gruss, Li-Jun Chen, 2011
:Paphiopedilum cornuatum //und// Paphiopedilum × nitens, //eine neue Art und eine neue Naturhybride aus Yunnan, Kina//
:Die Orchidee 2011, 62 (4): 275 ~ 279


























































!Allmänt och utbredning
Arten hör hemma i de centralamerikanska länderna från Mexiko, Guatemala, Belize, El Salvador och Honduras, till Colombia, Venezuela och Brasilien som en epifyt i fuktiga skogar eller terrestriskt i stenig mylla på klippor mellan 1000 och 3000 meters höjd.
Tillsammans med //[[Stan. tigrina|2163605f-e49f-4a58-b220-c1a156158a1c]]// är //Stan. oculata// en av de orkidéarter som odlats längst. Under de tidiga pionjärdagarna var de i det närmaste obligatoriska i varje växthus av rang.
Det är de mörka fläckar som ser ut som ögon som gett den namnet //oculata//.

!Utseende
Det är en medelstor planta som får fem cm stora koniska pseudobulber med ett stort, avlångt, ensamt blad i toppen som kan bli närmare 40 cm långt. //Stan. oculata// är lika känd för sitt vilda utseende som för sin dominerande doft. Denna art doftar sött och starkt av vanilj och får ljusgula blommor med mörkröda, runda markeringar. Blommorna sitter på en tre dm långa stänglar under plantan och slår ut med upptill nio blommor per stängel under sensommaren. Varje blomma håller inte så länge men stora plantor kan ha flera blomstänglar som slår ut i succession efter varandra.

!Skötsel
Den odlas bäst i svala eller intermediära temperaturer på fuktiga, ljusa växtplatser. Dock bränner starkt, direkt solljus lätt bladen. De behöver mycket vatten under tillväxten för att bilda kraftiga, blomvilliga bulber. Torra rötter leder till torra, vissna blad.
De planteras med fördel i hängande, mossklädda korgar då blomstänglarna kommer ut under plantan och växer ner genom komposten. I korgen forma en kärna av lös barkkompost, täckt med sphagnum.

!Synonymer
__Homotypic Synonyms:__
//Ceratochilus oculatus// G.Lodd. (1832)
__Heterotypic Synonyms:__
//Dendrobium grandiflorum// Sw. (1829) nom. illeg.
//Stanhopea bucephalus// Lindl. (1832)
//Stanhopea lindleyi// Zucc. (1837)
//Stanhopea oculata// var. //barkeriana// Lindl. (1839)
//Stanhopea oculata major// Lodd. (1844) nom. nud.
//Stanhopea oculata pallida// Lodd. (1844) nom. nud.
//Stanhopea aurantia// P.N.Don (1845)
//Stanhopea oculata// var. //aureum// Henshall (1845)
//Stanhopea oculata// var. //cinnamomum// Henshall (1845)
//Stanhopea oculata// var. //barkeri// Heynh. (1846)
//Stanhopea oculata// var. //minor// Heynh. (1846)
//Stanhopea oculata// var. //meleagris// auct. (1851)
//Stanhopea oculata// var. //lindleyi// Lindl. (1852)
//Stanhopea guttata// Beer (1854)
//Stanhopea oculata// var. //conspicua// Regel (1855)
//Stanhopea guttata// K.Koch (1858) nom. illeg.
//Stanhopea oculata// var. //flava// Planch. (1858)
//Stanhopea oculata// var. //viridiaurea// Planch. (1858)
//Stanhopea ornatissima// Lem. (1862)
//Stanhopea cymbiformis// Rchb.f. (1865)
//Epidendrum cornutum// Sessé & Moc. (1894) nom. illeg.
//Stanhopea oculata// var. //constricta// Klinge (1898)
//Stanhopea oculata// var. //geniculata// Klinge (1898)
//Stanhopea minor// Schlechter (1917)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/stanhopeaoculata.htm]]
[[Autre Vie Orchids|http://stanhopea.autrevie.com/stanhopea_oculata.html]]



























































































































!Allmänt och utbredning
Det är en liten terrestrisk art som växer i djup skugga i lövkomposten i skogarna nedersta skiktet nära trädstammar och mossatäckta klippor nära rinnande vatten från sydvästra delen av den kinesiska provinsen Yunnan och norra Myanmar/Burma mellan 1200 och 1600 meters höjd.
Arten är uppkallad efter Frank Kingdom Ward, den brittiske armékapten och orkidéinsamlare som upptäckte arten 1922. 
//Paph. wardii// upptäcktes först i Myanmar/Burma, där den numer troligen är utrotad på grund av alltför intensiv insamling, och på grund av det politiska klimatet där, en växt som sällan hittades utanför landet. Den var extremt sällsynt och dyr fram till mitten av 1980-talet när nya populationer upptäcktes i Kina och exporteras till USA.
Den liknar mycket den vanligare //[[Paph. venustum|26bdbddd-fba3-44fd-9aea-497dcf352b14]]// och anses av vissa taxonomer vara en naturlig hybrid mellan //[[Paph. venustum|26bdbddd-fba3-44fd-9aea-497dcf352b14]]// och //[[Paph. sukhakulii|a222411f-d5d5-4041-a0b4-34ea6412ed9f]]//. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Planipetalum. Kromosomtalet är 2n=41, 44.

!Utseende
Den bildar en rosett med tre till fem avlånga blad, upptill 17 cm långa och två till fyra cm breda. Bladen är mörkt blågröna mönstrad i ljust grönt på ovansidan och undertill tätt översållad av purpurfärgade prickar. Under vintern till tidig vår kommer en mer än 20 cm lång, upprätt blomstängel med en ensam blomma. Blomman är långlivade, cirka tio cm stora och den vita dorsala sepalen har framträdande mörkgröna ränder. De breda petalerna är ljust gröngula, nästan helt täckta med rödbruna prickar. Läppen är grönaktig eller ljust gulbrun med mörkt gröna eller bruna nerver och överdelen tätt beströdd med rödbruna prickar och med en mörkgrön staminoid.

!Skötsel
I dess naturliga utbredningsområde kommer fukten från vinter till vår från dimma och lätta duggregn. Juni till september är den våtaste årstiden med mycket och kraftiga regn. Ge den en skuggig växtplats, 8000 till 10000 lux, med hög luftfuktighet och svala till intermediära temperaturer. Odla i en väldränerad mix med medelgrov barkkompost, perlit och hög andel sphagnum. För att inducera blomningen, minska vattningen under fyra veckor på vintern.

!Synonymer
__Heterotypic Synonyms:__
//Cypripedium vernayi// Kingdon-Ward (1938)
//Cypripedium wardianum// E.W.Cooper (1951)
//Paphiopedilum wardii// f. //alboviride// Braem (1998)
//Paphiopedilum wardii// var. //alboviride// O.Gruss & Roeth (1998)
//Paphiopedilum brevilabium// Z.J.Liu & J.Yong Zhang (2001)
//Paphiopedilum burmanicum// J.Yong Zhang & Z.J.Liu (2001)
//Paphiopedilum microchilum// Z.J.Liu & S.C.Chen (2001)
//Paphiopedilum multifolium// Z.J.Liu & J.Yong Zhang (2002)
//Paphiopedilum wardii// f. //ying-xiangii// F.Y.Liu & Z.F.Zhao (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphwardii.htm]] 2015-08-31
[[Burleigh Park Orchids|http://www.speciesorchids.com/paphiopedilumWardii_article.html]] 2015-08-31
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/wardii/index.html]] 2015-08-31
[[Orchid Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_wardii]] 2015-08-31
[[The Orchid Column|http://www.theorchidcolumn.com/2012/12/paphiopedilum-wardii.html]] 2015-08-31
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092428]] 2015-08-31











































!Allmänt och utbredning
//Pleurothallis// är en helt igenom Nya Världen-grupp, och förekommer från U.S.A. längst söderut ner till tropikerna i Sydamerika, med de flesta arterna i molnskogarna i Colombia. De flesta är epifytiska högt upp i träden, men de kan förkomma terrestriskt eller litofytiskt.
Det är fortfarande ett av orkidévärldens största släkten med <$view field="count"/> arter. Omfattande DNA-analyser har under 2004 delat upp det i ett tjugotal nya släkten och mer än halverat ett släkte som tidigare rymde bortemot två och ett halvt tusen arter.
Namnet kommer från grekiskans ''pleuron'' som betyder "kant", "sida", och ''thallos'' för "gren". Namnen anspelar på de smala luftrötterna som ser ut som ribbliknade grenar.

!Utseende
Släktet är enormt variabelt i både storlek och form, från mosslika miniatyrer till meterhöga växter, upprätta eller krypande, tunna eller köttiga blad i en oändlig variation. De har reducerade pseudobulber och istället har en del tjocka, suckulenta blad.
Deras blommor tillhör orkidévärldens mest underligt formade och ofta väldigt små, ibland bara några millimeter stora. En sak de har gemensamt är att de alla har två pollinier.

!Skötsel
Deras odlingsbetingelser varierar i lika stor grad som deras utseende, så några generella odlingsråd är svårt att ge. De flesta kräver hög luftfuktighet, god luftcirkulation och svalare temperaturer. Många kan blomma i månader, bara betingelserna är de rätta. Som epifyter vill de inte ha rötterna stående i vatten, utan en daglig dusch för att sedan snabbt torka upp igen, är allt de behöver. En svag dos näring är fullt tillräckligt, halva den rekommenderade dosen eller svagare, varje vecka under tillväxtperioden. De behöver en ljus växtplats, men full sol bör undvikas för de flesta arter.

!Taxonomi
''Underfamilj'': Epidendroideae

''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Pths. ruscifolia|bb6e48bf-2940-466c-8637-17a90f49c836]]// Brown (1813)

''Uttal''
PLUH-ruh-thal-lis

''Synonymer''
__Heterotypic Synonyms:__
//Acronia// Presl (1827)
//Centranthera// Scheidweiler (1842)
//Rhynchopera// Klotzsch (1844)
//Talpinaria// Karsten (1859)
//Pleurobotryum// Barbosa Rodrigues (1877)
//Colombiana// Ospina (1973)
//Andreettaea// Luer (1978)
//Masdevalliantha// Szlach. & Marg. (2001)
//Mirandopsis// Szlach. & Marg. (2001)
//Zosterophyllanthos// Szlach. & Marg. (2001)
//Ancipitia// Luer (2004)
//Antilla// Luer (2004)
//Apoda-prorepentia// Luer (2004)
//Areldia// Luer (2004)
//Atopoglossum// Luer (2004)
//Cucumeria// Luer (2004)
//Lindleyalis// Luer (2004)
//Madisonia// Luer (2004)
//Mixis// Luer (2004)
//Proctoria// Luer (2004)
//Rubellia// Luer (2004)
//Xenosia// Luer (2004)
//Orbis// Luer (2005)
//Vestigium// Luer (2005) nom. illeg.
//Gerardoa// Luer (2006)
//Tridelta// Luer (2006)
//Tigivesta// Luer (2007)
//Sansonia// Chiron (2012)

!Rekommenderad läsning
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/pleurothallis.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Pleurothallis]] med [[lista över arter|http://en.wikipedia.org/wiki/List_of_Pleurothallis_species]]
[[Annals of Botany|http://aob.oxfordjournals.org/cgi/reprint/88/1/75.pdf]]

































































































































































































!Allmänt och utbredning
Denna storväxta art föredrar öppna, svala eller varma, helt eller delvis lövfällande molnskogar mellan 900 och 2400 meters höjd från Mexiko och söderut till norra Nicaragua.

!Utseende
Pseudobulberna är ovala eller koniska, något tillplattade från sidorna, med två lansettlika blad.
Blommorna skiljer sig från de hos andra arter inom släktet med sin läpp som vid basen är täckt med gröna vårtor. De blommar från sensommaren till tidig höst på en mer än halvmeterlång blomstängel. Stängeln som kommer från basen av en mogen bulb bär mellan tio och 20 blommor. Blommorna kan bli upptill 20 cm stora och doftar svagt av svartpeppar så länge blomman är relativt nyutslagen. Sepalerna och petaler är gröna med mörkt gröna eller rödbruna prickar. Även den ljust grönvita läppen är översållad av mörkgröna prickar.

!Skötsel
De odlas med fördel i korgar med en öppen kompost. De vill ha en mycket ljus, varm växtplats med temperaturer mellan 18 och 25 grader, och bra luftcirkulation. Plantan behöver mycket vatten två till tre gånger i veckan och gödning ofta. De fodrar regelbundna omplanteringar, helst varje år.
Ge den en sval period under hösten från augusti, med ett minimum av tolv grader under natten. Med den lägre temperaturen, torka gradvis ut plantan under en period av tre till fyra veckor och ge den vatten varannan vecka under ett par månaders tid. I januari när blomstängeln borde ha växt till ordentligt, flytta tillbaka plantan till en ljus och varm plats. Dela plantan om nödvändigt när de nya bulberna precis börjar synas.

!Synonymer
__Homotypic Synonyms:__
//Oncidium verrucosum// Rchb.f. (1863)
__Heterotypic Synpnyms:__
//Brassia brachiata// Lindley (1842)
//Brassia aristata// Lindley (1844)
//Brassia odontoglossoides// Klotzsch & H.Karsten (1847)
//Brassia coryandra// E.Morren (1848)
//Brassia longiloba// DC. (1848)
//Brassia cowanii// Lindley (1854)
//Oncidium brachiatum// Rchb.f. (1863)

!Rekommenderad läsning
[[OrchideSpecies|http://www.orchidspecies.com/brasverrucosa.htm]]
[[Plantfacts|http://www.plantfacts.com/Family/Orchidaceae/Brassia.verrucosa.shtml]]
[[Canadian Orchid Congress|http://www.canadianorchidcongress.ca/news/cocv063.html]]















!Allmänt och utbredning
//Isochilus// är ett litet släkte med <$view field="count"/> accepterade arter. De växter epifytiskt, litofytiskt eller mer sällan terrestriskt på Sydamerikas lågland, från Kuba och Mexiko till Argentina.
Alla arter inom släktet ser likartade ut men kan delas in i två olika kategorier, en med blommorna i ett tätt, kompakt kluster, som hos //[[Ischls. major|7ac03dba-129f-431b-a6b6-e7424b0e9a84]]//, och en med betydligt mer gles eller till och med ensidig blomställning, som hos //[[Ischls. linearis|5e5b11e7-3fd8-4247-9591-72c33b289b3e]]//.
Namnet kommer från grekiskans ''isos'' som betyder "samma" och ''cheilos'' som betyder "läpp" och går ut på att läppen har samma storlek som sepalerna och petalerna.

!Utseende
De har ett krypande växtsätt och bildar lätt hela mattor om de trivs. De saknar pseudobulber utan har en upptill 80 cm lång, smal, stam med små smala, platta blad i par på motsatta sidor av stammen. Bladen kommer längs de övre två tredjedelarna av stammens längd. De en till många små rörformiga, oskaftade, blommorna kommer i toppen av stammen, växande direkt på stammen..

!Skötsel
De kräver fuktiga, skuggiga, växtplatser och regelbunden vattning som håller komposten ständigt fuktig. Odla dem i en kruka med väldränerad barkkompost med trädormbunke och perlite.

!Taxonomi
''Underfamilj'': Epidendroideae

''Tribus'': Epidendreae
''Undertribus'': Ponerinae

''Typart''
//[[Ischls. linearis|5e5b11e7-3fd8-4247-9591-72c33b289b3e]]// R.Br. (1813)

''Uttal''
eye-so-KYE-lus

!Synonymer
__Heterotypic Synonyms:__
//Leptothrium// Kunth (1816), pro syn.

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Isochilus]]
!Allmänt och utbredning
Det är en medelstor brasiliansk epifyt som växer i fuktiga och skuggiga habitat mellan 500 och 900 meters höjd.
Artnamnet kommer från latinets ''harpophyllus'' som betyder "formad som en skära", svängd, efter bladens utseende.

!Utseende
Den växer med de upptill 20 cm långa, väldigt smala, pseudobulberna tätt tillsammans i små grupper. Från toppen av bulben kommer ett enda, smalt, styvt blad, lika långt som bulben och välvt i en båge. Från bladfästet i toppen av bulben kommer under senvintern och vår en smal blomstängel som kan bära upptill tio intensivt orangefärgade blommor i en blomställning som är kortare än bladen. De platta blommorna blir mellan fem och åtta cm stora med en liten, ljust orange läpp. Vanligtvis saknar blommorna doft. Blomningen varar ungefär tre veckor.

!Skötsel
Den växer svalt men inte kallt med stor temperaturskillnader mellan dag och natt, under vintern upptill 21 grader på dagen och ner till 14 under nätterna. Sommartid gärna sex grader högre. Den behöver inte någon vintervila eller bara en mycket kort, torr, sådan. Efter blomningen kan plantan få gå in i en kort viloperiod med reducerad vattning. På våren när den nya tillväxt kommer kan mängden vatten gradvis ökas igen.
Arten växer skuggigare och fuktigare än de flesta andra närbesläktade arter. Den behöver en liten kruka eller korg med en väldränerad och genomsläpplig barkkompost som låter rötterna torka upp snabbt igen efter vattningarna. Ge svag gödning med varje vattning, minst en gång i veckan, under tillväxtperioden.

!Synonymer
__Homotypic Synonyms:__
//Laelia harpophylla// Rchb.f. (1873)
//Hoffmannseggella harpophylla// H.G.Jones (1970)
//Sophronitis harpophylla// Van den Berg & M.W.Chase (2000)
//Dungsia harpophylla// Chiron & V.P.Castro (2002)
__Heterotypic Synonyms:__
//Laelia geraensis// Barb.Rodr. (1876)
//Laelia cowanii// Rolfe (1900)
//Hoffmannseggella brevicaulis// H.G.Jones (1972)
//Laelia harpophylla// var. //xanthina// Pabst (1978)
//Laelia brevicaulis// Withner (1990)
//Sophronitis brevicaulis// Van den Berg & M.W.Chase (2000)
//Dungsia brevicaulis// Chiron & V.P.Castro (2002)
//Laelia harpophylla// f. //xanthina// M.Wolff & O.Gruss (2007)
//Cattleya brevicaulis// Van den Berg (2008)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/laelharpophylla.htm]]
[[Orchids WIki|http://orchids.wikia.com/wiki/Sophronitis_harpophylla]]























































!Allmänt och utbredning
Som namnet antyder är det en art funnen på Costa Rica men även i de fuktiga molnskogarna i delar av Panama där de växer epifytiskt på skuggiga trädstammar mellan 300 och 1400 meters höjd över havet.
Liksom alla undersökta arter inom släktet pollineras //Dcha. costaricensis// av hanar av [[orkidébin, från tribus Euglossini|https://sv.wikipedia.org/wiki/Orkidébin]].
Taxonomiskt tillhör den sektionen Dichaea.

!Utseende
Det är en liten art utan pseudobulber utan istället med en hängande stam tätt beströdd med små, nästan trekantiga, läderartade blad. Stammarna fortsätter hela tiden att växa, bildar luftrötter och grenar sig, och ger efter ett tag, om den trivs, ett nästan ormbunksliknande intryck. Bladen som vid basen omsluter stammen kommer alternerande i två rader i ett plan. Sommartid kommer en mycket kort blomstängel som bär en ensam blomma, bara lite större än en cm. De stjärnformade blommorna är vanligen i gulgröna, violetta eller röda nyanser med markeringar i mörkare toner. Med tanke på blommornas inga storlek kan de avge en förvånansvärt stark doft.

!Skötsel
Den behöver en skuggig, intermediär eller varm växtplats med hög luftfuktighet och god luftcirkulation. Kan med fördel odlas monterad eller i hängande korgar med sphagnum eller en mix av medelgrov barkkompost med sphagnum och perlite, för att på så sätt bäst framhäva dess hängande växtsätt. Ge mycket vatten och jämn temperatur hela året.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dichcostaricensis.htm]] 2015-11-09



































!Allmänt och utbredning
Arten återfinns endast på Filippinerna runt 500 meters höjd över havet. Den blandas ofta ihop med //[[Bulb. nymphopolitanum|efe70069-c011-46f9-9492-eca999a489e2]]// som ser liknande ut men har mindre blommor. Den tillhör sektionen Lepidorhiza inom bulbophyllumsläktet.
Blommorna hos //[[Bulbophyllum|e98d2bd9-4878-4182-acc8-d67b9b46cc1f]]// innehåller i regel ingen nektar utan sepaler och petaler är istället täckt med lättlösliga substanser som doftar starkt för att locka till sig en pollinatör och leds mot läppen där koncentrationen är störst. När rätt sorts fluga som lockats av blommans doft landar på den rörliga läppen tippas denna med huvudet före in mot könspelaren och kläms fast. Flugan får under kampen för att komma loss med sig en klibbig pollenmassa fastklistrad på bröstet.
Den beskrevs av den amerikanske botanikern Oakes Ames som namngav den för att hedra den svenske botanikern och genetikern Albert Levan (1905-1998).

!Utseende
Det är en liten och kompaktväxande art som snabbt fyller sin kruka och bildar en stor planta. De päronformade pseudobulberna kan bli fem cm stora, toppade med ett ensamt, blågrönt, upptill 20 cm stort, avlångt blad som smalnar av mot bladbasen. Blommorna som två eller tre åt gången kommer på den upptill två decimeter långa, upprätta stängeln kommer under våren eller sommaren. De blir mellan fyra och åtta cm stora i vaxartade orange eller rödbruna färger med gula petaler och en knallröd läpp som är fäst som med ett gångjärn så den vippar för minsta vindpust. De har en inte helt angenäm doft, många beskriver den som hamnområde eller som om hunden gjort ifrån sig.

!Skötsel
Den odlas bäst i korgar eller stora, grunda krukor med sphagnum och fin barkkompost under varma och ljust halvskuggiga förhållanden, 15000 till 25000 lux. Temperaturen bör inte gå under 15 grader och inte över 30. Håll den fuktig under tillväxtmånaderna, låt inte plantan torka ut, utan försök vattna tre till fem gånger i veckan när det är varmt. Mycket vatten, gödning och ljus under tillväxten främjar blomningen. Håll den något torrare med reducerad vattning under vintern. Försök hålla god luftcirkulation för att minimera risken för svampangrepp. Normalt är det en ganska lättodlad art.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbolevanae.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Bulbophyllum_levanae]]
[[PBase|http://www.pbase.com/rogiervanvugt/image/137217673]] - foto
[[Bulbophyllum|http://www.bulbophyllum.com/gallery2/main.php/v/Bulbophyllum/levanae/]] - foton
[[OrchidsOnline|http://www.orchidsonline.com.au/node/657]]
[[The Beauty of Orchids and Flowers|http://www.orchids-flowers.com/orchids/bulbophyllum-levanae-ames-1915/]]











!Allmänt och utbredning
//Paph. philippinense// är en hotad art, som namnet antyder, från Filippinerna och de omgivande öarna Luzon, Visayas, Mindanao och delar av Palawan. Den återfinns också i de allra nordligaste delarna av Sabah på Borneo. Förstörelsen av dess habitat har begränsat den till de områden som fortfarande innehåller ymniga låglandsregnskogar och skogsbeklädda höglandsområden. Där växer den på utsatta platser, men inte i direkt solsken, inte enbart terrestriskt i kompostmaterialet på skogsgolvet, eller epifytiskt på trädgrenarna utan också litofytiskt i mossan på kalkstensklippor från havsnivå till 500 meters höjd. Arten är en av de mest variabla och vittspridda inom släktet.

!Utseende
Den blir stor, upptill en halvmeter hög, med en mycket variabel bladformen och färger från dovt mörkgrönt till skinande ljusgrönt. Bladen blir upptill fyra dm långa och mellan två till fem cm breda. Dessa är inte styva utan ganska ömtåliga och skadas lätt. På bladen kan det bildas insjunkna gropar eller områden där vävnaden har kollapsat och bildar oregelbundna märken. Det är oundvikligt och drabbar framför allt äldre blad oavsett hur bra de sköts.
Den blommar på en halvmeter lång, upprätt blomstängel som kommer under tidig vår, från februari till mars. Stängeln kan bära tre till sex blommor som blir ungefär åtta cm stor, inte medräknat petalerna. Den dorsala sepalen är vit med ränder i brunt och purpur. Synsepalen är vit med gröna vener. Petalerna är purpurröda med en gul bas och ljust gröna spetsar. Petalerna är vridna och kan bli åtskilliga dm långa. Den hjärtformade påsen är brungul med ljusa grönbruna vener.

!Skötsel
Som en låglandsart kan de tolerera vida temperaturområden, men i de flesta naturliga habitaten ligger temperaturen mellan 16 och 30 grader med tio graders skillnad mellan dag och natt.
Även i avseende på ljustillgången är den mycket variabel och kan tolerera från djup skugga till full sol. Det verkar vara en relativt enkel art att odla som kan klara många skiftande odlingsintervall. Däremot verkar den frodas om luftfuktigheten kan ökas upptill åtminstone 80 procent.
Den uppskattar också en andel mossa runt rötterna. Den blir lätt stor och topptung och bör därför planteras i en tung kruka om den inte hängs i ampel. När den delas, sörj för att varje del få tre eller fler tillväxter eftersom den nya tillväxten inte utvecklar något rotsystem på ett år eller två. Trots att den är lätt att odla, kan den vara svår att få att blomma.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium philippinense// Rchb.f. (1862)
//Cordula philippinensis// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphphilippinense.htm]]
[[Phils OrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_mastigopetalum.htm#phil]]




















































!Allmänt och utbredning
//Anoectochilus// är ett släkte med <$view field="count"/> arter som vanligen återfinns som små terrestriska plantor, men även växande litofytiskt, i fuktiga områden med djup skugga, från Himalayas utlöpare i Indien till berg i sydöstra Asien, söderut till Kina, Japan, Indonesien, Australien, Papua Nya Guinea och en del öar i Stilla Havet, bland andra Taiwan.
De tillhör den grupp av orkidéer som kallas "Juvelorkidéer" för sina fantastiska bladverks skull. Som förklaring till färgmönstren hos bladverket, berättas i en legend från Indonesien att en gudinna höljd i skira sidentyger besökte en fattig byn i hopp om att ge människorna där en större uppskattning för skönare ting. Men folket var rädda för denna främling och körde bort henne. En bit bort, för att återställa sig efter sin pärs med de infödda, tog hon en av sina glittrande slöjor och lade den på klipporna för att torka. Folket insåg då, för sent, hennes gudomlighet. När hon skulle lämna dem, fastnade slöjan i ojämnheterna på klippan och revs sönder... och dessa stenar blev de växter som vi nu känner som juvelorkidéer.
Vissa arter, till exempel //[[Anct. formosanus|45356169-5bd3-4371-a70c-2d0e9c039ca4]]//, har används i traditionell medicin i bland annat Kina, och har även visat sig ha antiinflammatoriska och antidepressiva egenskaper
Namnet kommer från de grekiska orden ''aniktos'' som betyder "öppen" och ''cheilos'' som betyder "läpp" och hänvisar till den öppna uppbyggnaden hos blomman.

!Utseende
De saknar pseudobulber utan har ludna, ulliga rötter som förankrar de köttiga, krypande rhizomen ovan marken. De gröna eller purpurfärgade, ovala bladen har korta bladstjälkar och bildar en låg, basal bladrosett. Bladen lever en eller ett par säsonger innan de vissnar och ramlar av. De har en sammetslen yta med nervatur i metallfärger koppar, silver eller guld som bildar invecklade mönster i lysande färger. Den upprätta blomstängeln kommer under våren från mitten av bladrosetten och bär ett fåtal små, kortlivade blommor med framträdande läpp. Även om blommorna i sig är små är de stora i förhållande till plantan och har en del intressanta aspekter. Petalerna bildar tillsammans med den dorsala sepalen en huva över de två pollinierna och två märkena. Sepalerna är gröna med bruna markeringar och petaler och läpp är vita.

!Skötsel
I naturen växer de i djup skugga på markens förna av humus och halvt nedbrutna löv eller i den fuktiga mossan på stenar. I odling växer de bäst i varma, fuktiga och skuggiga förhållanden med god luftväxling. Plantera dem i en väldränerande kompost som håller fukten bra, till exempel ren sphagnum, en fin bark kompost med halvmultnade löv och sand eller en blandning av båda komposterna.

!Taxonomi
''Underfamilj'': Orchidoideae
''Tribus'': Cranichideae
''Undertribus'': Goodyerinae

''Typart''
//[[Anct. setaceus|886c153b-311a-46c8-8c4e-99529238fd91]]// Blume (1825)

''Uttal''
a-neck-toe-KY-lus

''Synonymer''
__Heterotypic Synonyms:__
//Chrysobaphus// Wall. (1826)
//Anectochilus// Blume (1858) orth. var.

!Rekommenderad läsning
[[EOL species|http://eolspecies.lifedesks.org/pages/49660]]
[[Australian National Botanic Gardens|http://www.anbg.gov.au/cpbr/cd-keys/orchidkey/html/genera/Anoectochilus.htm]]
[[Orchid Wikis|http://orchids.wikia.com/wiki/Anoectochilus]]





































!Allmänt och utbredning
//Paph. argus// är en art endemisk för ön Luzon i Filippinerna där den växer i provinserna Benguet, Ifugao och Quezon på öst- och västsluttande kalkstensklippor. De återfinns vanligen strax under toppen av vulkaniska åsar mellan 750 och 2000 m höjd, i tjock mossa vid basen av förkrympta träd eller halvt förmultnade lövkompost i bambusnår. De kan i enstaka fall även påträffas så långt ner som på 600 m höjd eller så högt upp som 2500 m.
Arten upptäcktes av Gustav Wallis 1872 på Luzon och infördes i europeisk odlings av firman "Veitch and Sons" samma år och blommade för första gången i Europa nästföljande år.
Cribb placerade denna art i undergenus Paphiopedilum sektion Barbata tillsammans med 23 andra arter, som har det gemensamt att de har marmorerade blad och blomstängeln bär endast en blomma.
Namnet kommer från den grekiska mytologin där [[Argus Panoptes|http://sv.wikipedia.org/wiki/Argos_(j%C3%A4tte)]] var en allseende jätte med hundra ögon och anspelar på de otaliga mörkröda prickar som översållar blommans petaler.
Kromosomtalet är 2n=38.

!Utseende
Det är en medelstor terrestrisk eller litofytisk art som saknar pseudobulber utan de solfjädersformiga bladgrupperna kommer med några cm mellanrum från ett underjordiskt rhizom. Varje grupp blir sällan över 20 cm stora och har tre till fem stycken, upptill 24 cm långa och två till fem cm breda blad. Bladen är elliptiska eller avlånga, ljust gröna med mörkare gröna markeringar och en kluven, sågtandad spets. Undersidan av bladen är mot basen översållad med purpurfärgade prickar. Under senvåren eller tidig sommar kommer en upptill 40 cm lång, behårad, upprätt blomstängel som bär en ensam, tio cm stor blomma. Blomman är ljusgrön med mörka prickar och ränder. Läppen är grön och rosa eller lila med tydliga, mörkgröna nerver. Blommorna kan hålla mer än sex veckor.

!Skötsel
I naturen växer de i hög luftfuktighet med ljus skugga och får en nattemperatur mellan 17 och 20 grader. För att inducera blomning behövs en temperatursänkning ner till tio grader under nätterna och samtidig minskning av vattningen under senvintern eller tidig vår. Mars till juni är de varmaste och torraste månaderna då det räcker med en vattning i veckan, men den får inte torka ut helt. Resten av året behöver den vatten var fjärde till var femte dag.
Den är relativt enkel att odla i en väldränerad mix av medelgrov kompost med stor andel perlite eller sphagnum. Plantera om årligen så inte komposten bryts ner för mycket.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium argus// Rchb.f. (1873)
//Cordula argus// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium moensianum// auct. (1887)
//Cypripedium pitcherianum// Manda (1887)
//Cypripedium moensii// auct. (1893)
//Paphiopedilum sriwanae// Koop. (1991)
//Paphiopedilum argus// var. //sriwanae// O.Gruss (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphargus.htm]] 2015-02-05
[[SlipperOrchids|http://slipperorchids.info/paphdatasheets/sigmatopetalum/argus/index.html]] 2015-02-05
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_argus]] 2015-02-05
[[The Beauty of Orchids & Flowers|http://www.orchids-flowers.com/orchids/lady-slipper-orchid-paphiopedilum-argus/]] 2015-02-05
[[the Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/3d-argus/argus-spin.html]] 3D 2015-02-05





















































































































































































































































!Allmänt och utbredning
//Paph. glanduliferum// växer mycket ljust, eller rentav soligt, och varmt i de fuktiga regnskogarna på och i arkipelagen runt Borneo och Nya Guinea. Där växer den i mossfyllda skrevor på de utsatta kalkstensklipporna upptill 1700 meters höjd över havet.
Den infördes i odling i Europa 1886.
Kromosomtalet är 2n=26.

!Utseende
Denna storväxta, robusta planta som kan bli en halvmeter hög är en av de mångblommiga paphiopedilumarterna.
Den kan blomma under april och maj, och igen under november och december, på en fantastisk blomstängel mer än en halvmeter lång, med två till fem blommor som vardera kan bli mer än tio cm stora. Den blommar på det fullvuxna skottets andra år. Blomstängeln är purpur-grön-brun och kort hårig. De fyra till sex bladen blir upptill fyra dm långa och mellan tre och sex cm breda. De är något köttiga och rent gröna. I utseende placerar den sig mellan //[[Paph. stonei|1b9d4495-8551-441d-9fea-555ed12559f7]]// och //[[Paph. rothschildianum|edfdc74c-5e39-4321-97a3-be9ef4cc4c68]]//. Arten kan lätt identifieras på de stora blommorna med utmärkande strimmiga sepaler och brun-grön-randiga petalerna med krusiga, vågigia kanter. Den dorsala sepalen är ljust gul med mörka streck. Petalerna är gulgröna med mörka centrala linjer, de är aldrig purpurfärgade. Läppen är ljust grön med mörkare nervatur.

!Skötsel
//Paph. glanduliferum// är en kraftig art och en stor planta från de fuktiga regnskogarna på Borneo och New Guinea, så den kräver mycket vatten och näring under sin tillväxtperiod efter att det nya skottet framträder. Den vill ha en varm växtplats, med så mycket ljus att bladen nästintill bränns.
Plantera den i en väldränerande, öppen semiterrest kompost med mossa. Den behöver en kort vintervila för att blomma. Eftersom de naturligt förekommer vid ekvatorn, kräver de inte så stor årstidsvariation, förutom den variation i nederbörd som monsunen svara för. Luftfuktigheten är ständigt hög med en sommartemperatur som kan gå över 30 grader under dagen och ner till 20 grader nattetid. Under vintern håller sig temperaturen tre till fyra grader lägre.
Den anses som en svår art att etablera, och nästan omöjligt om delningen saknar rötter. När den väl är etablerad är den relativt lätt att få att blomma.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium glanduliferum// Blume (1849)
//Cordula glandulifera// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium praestans// var. //kimballianum// Linden & Rodigas (1890)
//Paphiopedilum glanduliferum// var. //kimballianum// Fowlie (1991)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphpraestans.htm]]
[[OrchidsOnline|http://www.orchidsonline.com.au/interactive/node/2102]]
[[Papua NewGuinea OrchidNews|http://www.orchidspng.com/contrib_garay2.html]]
[[SlipperOrchids|http://www.slipperorchids.info/paphdatasheets/polyantha/praestans/index.html]]
[[PhilsOrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_mastigopetalum.htm#prae]]
































!Allmänt och utbredning
//Phrag. hirtzii// [frag-mi-PEE-dee-um HIRTZ-ee-eye] växer i terrestriskt eller litofytiskt i nordvästra Ecuadors och sydvästra Colombias varma, fuktiga låglandsskogar, på stenblock i eller på klippor nära rinnande vatten, mellan 500 och 900 meters höjd.
Den är uppkallad efter den tyske ingenjören och orkidéinsamlaren Alexander C. Hirtz som upptäckte arten i Ecuador den 15 augusti 1986, nära en grupp //[[Phrag. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]//. //Phrag. hirtzii// är mycket nära släkt med //[[Phrag. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]// men skiljer sig från den senare genom sin mindre storlek, de gräsliknande bladen, de hängande och upp till 9 gånger vridna petalerna, den helt hårlösa staminoiden och att blomstängeln bara blir 40 cm hög. De båda arterna bildar dock en naturhybrid, //Phrag. × roethianum//. Taxonomiskt tillhör den sektionen Lorifolia.

!Utseende
Det är en kompakt art som bildar en rosett med gräsliknande blad, upptill 25 cm långa och bara en cm breda. Skotten kommer längs en åtta mm tjock jordstam, med upptill tolv cm mellanrum. Vid skottet bildas en förtjockning på jordstammen där de egentliga rötterna kommer från. När som helst under året kan blomstängeln komma. Stängeln blir mer än 40 cm lång, upprätt och bär fem till sju successivt öppna blommor, sju till nio cm stora. Blommorna liknar de hos //[[Phrag. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]// men petalerna hänger ner och är vridna upp till 9 gånger. Staminoiden är slät och saknar till skillnad från de flesta inom släktet helt hår.

!Skötsel
Ge den en varm växtplats, dagtid helst inte mycket över 26 grader och nattetid inte mycket under 15 grader. Den kan tolerera medelstark sol och älskar mycket, rent, vatten under tillväxten. Odla i en väldränerad kompost och vattna dagligen under den varmaste årstiden, vintertid varannan eller var tredje dag.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum hirtzii// V.A.Albert & Börge Pett. (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phraghirtzii.htm]] 2015-10-14
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=145]] 2015-10-14



































































!Allmänt och utbredning
Detta släkte är endemiskt för östra Australien, där de spänner från söder med ett mycket kallt klimat, till längst norrut med ett tropiskt klimat. Av släktets arter är flertalet epifytiska och bara tre litofytiska.
I naturen har de en omfattande utbredning. De kan växa på klippor över raviner eller vattenfall, eller i fuktiga skogar. Luftfuktighet och skillnader mellan dag- och nattemperaturen är antagligen viktigare än absoluta temperaturer. Trots att de växer i utsatta lägen i det vilda, är de sannolikt skyddade från direkt solljus.
Släktet har varit i ständig föränderlig sedan inrättandet av Robert Brown 1810. Från början innehöll det nästan 200 arter med en fördelning genom det mesta av Asien och Oceanien. Nuvarande taxonomi omfattar endast <$view field="count"/> beskrivna arter.
Namnet //Sarcochilus// är sammansatt av de grekiska orden ''sarcos'', "köttig", och ''cheilos'', "läpp".

!Utseende
Dessa växter är små och kompakta, med ett monopodialt vandaliknande växtsätt, som regel inte högre än 15 cm. En del kan bilda keikis, och grenar sig villigt från basen, och kan bilda ganska stora bestånd med tiden.
Bladen på de flesta arterna är långa, smala, välvda och glänsande. Bladverket är arrangerade i alternerande par med en hängande struktur.
Blomfärgen spänner över rent vitt hos //[[Sarco. falcatus|aa7e61eb-e111-4ef8-8efe-76c137fd99fa]]// till vitt och rött hos //[[Sarco. fitzgeraldii|afd996bc-2627-489c-a5c9-ab340e6b7cad]]//. Om växten inte vill blomma kan det bero på att den växer för skuggigt, eller att luftcirkulationen är blockerad av andra växter.

!Skötsel
De flesta arterna kan odlas under //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]// eller //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// förhållanden. Odla sarcos i grunda lerkrukor, korgar eller monterade.
De svarar väl på hög luftfuktighet, god luftcirkulation och svala till intermediära temperaturer. Även om varmare temperaturer tolereras, föredrar majoriteten sarcos svalare förhållanden, runt 15 till 20 grader.
De växer kontinuerligt och kräver ingen viloperiod. De kan sakta ner tillväxten under mycket varma förhållanden, men de upphör aldrig att växa.
Små plantor och sticklingar kan planteras i en medelgrov barkmix och mossa, medan utvecklade plantor föredrar en grövre kompost. Framför allt behöver växten en luftig kompost. Använd gärna lerkrukor med hål i. Dessa tillåter att luften kommer till rötterna, och minskar risken att vatten ska bli stående för länge.
Gödsla plantorna var tredje vattning med en mycket svag näringslösning, cirka en åttondel av vanlig dos. Plantor som växer i krukor kan vattnas varannan eller var tredje dag. //[[Sarco. hartmannii|c4ef8e97-4ec6-4dd4-9bb0-a994b9922bd3]]// och //[[Sarco. fitzgeraldii|afd996bc-2627-489c-a5c9-ab340e6b7cad]]// är undantagen. Låt dem aldrig torka ut. De behöver odlas fuktigt, men inte genomvått. Var försiktig för övervattning under den kalla årstiden, och undvik alltid stående vatten i bladkronan. Titta på bladen, vid för torra omständigheter skrumpnar de ihop.

!Taxonomi
''Underfamilj'': Epidendroideae

''Tribus'': Vandeae
''Undertribus'': Aeridinae

''Typart''
//[[Sarco. falcatus|aa7e61eb-e111-4ef8-8efe-76c137fd99fa]]// Brown (1810)

''Uttal''
sar-ko-KYE-lus

''Synonymer''
__Heterotypic Synonyms:__
//Gunnia// Lindley (1834)
//Parasarcochilus// Dockrill (1967)
//Monanthochilus// R.Rice (2004)

!Rekommenderad läsning
[[San Diego County Orchid Society|http://www.sdorchids.com/sarco_article.htm]]
[[The Brisbane Orchid Society|http://www.users.bigpond.com/gmcorbin/bos/Sarcs.html]]
[[Milo Bali Adelaide Orchids|http://www.adelaideorchids.com/index_cultural_sarcochilus_notes.htm]]
[[Easy Orchids|http://www.easyorchids.co.uk/site/content/view/24/47/]]







































!Allmänt och utbredning
Det är ett litet, primitivt släkte med totalt <$view field="count"/> terrestriska arter från de fuktiga delarna av Himalaya i Kina och Indien, Myanmar/Burma, Thailand, Laos, Kambodja, Vietnam, genom sydöstra Asiens övärld på öar som Ryukyuöarna i Japan, Sri Lanka, New Guinea, malaysiska och filippinska arkipelagen och delstaten Queensland i norra Australien.
De har visuella likheter med både övriga Orchidaceae och med Liliaceae, liljefamiljen.
De räknas som en möjlig kandidat till ursprunget till Orchidaceae då de saknar flera avancerade egenskaper som förekommer hos flertalet övriga orkidéer. Bland annat skiljer sig arterna inom släktet, tillsammans med //[[Neuwiedia|e1130098-f9a3-4f30-8ac9-f5ad80b40e2d]]//, från de flesta andra orkidéer genom att ståndare och märke inte smält samman till en enda könspelare och att med pollenet inte är samlat i pollinier eller pollenmassor. Släktet //Apostasia// är indelat i två sektioner, ''Apostasia'' som kännetecknas av en extra, central, steril ståndare. Sektionen ''Adactylus'' saknar helt denna extra ståndare.
Det generiska släktnamnet //Apostasia// är ett grekiskt ord som betyder "separation" eller "skilsmässa" och hänvisar till den unika blomstruktur som vissa tidigare författare använt för att skilja den från Orchidaceae.
<$reveal type="nomatch" state="$:/temp/state-09fd104d-7cc0-4074-8c3c-0443f8a89c59" text="show">
<$button set="$:/temp/state-09fd104d-7cc0-4074-8c3c-0443f8a89c59" setTo="show">visa mer info om sektionerna</$button></$reveal>
<$reveal type="match" state="$:/temp/state-09fd104d-7cc0-4074-8c3c-0443f8a89c59" text="show">

;Apostasia
://[[A. odorata|eb8d9bc3-5dd3-4283-8a80-046521c52f87]]// Blume (1825)
://[[A. ramifera|ff9ffa8d-1465-4513-a559-bb7b1344e635]]// S.C.Chen & K.Y.Lang (1986)
://[[A. wallichii|433b00cd-afa2-4dd7-8cac-80b5a71a16ef]]// R.Br. (1830)
://[[A. shenzhenica|4d951300-e4d4-4bad-97cf-20468fc384ff]]// Z.J.Liu & L.J.Chen (2011)
://[[A. parvula|f20df922-67f7-4d89-a92f-962452b704fc]]// Schltr. (1906)
;Adactylus
://[[A. nuda|e25a61e9-97c3-4d73-bcaa-38a268015d0d]]// R.Br. (1830)
://[[A. latifolia|a78cd53d-c9cf-4f09-bb01-9c7e9aec23fb]]// Rolfe (1889)

<$button set="$:/temp/state-09fd104d-7cc0-4074-8c3c-0443f8a89c59" setTo="hide">dölj</$button>

</$reveal>

!Utseende
Arterna inom //Apostasia// producera en upprätt blomställning med upp till sex sidogrenar från den horisontella jordstammen. Rötterna är tjocka med oregelbundna vårtor och saknar velamen. Bladen är tunna, långsmala och kommer i spiral runt en upprätt stam som kan vara grenad eller inte. Under sommarens regnperiod kan plantorna bär upptill 30 vita eller gula blommor som är icke-resupinata, det vill säga som inte har vänts upp och ner som hos de flesta övriga orkidéer. De små blommorna som mäter åtta till tolv mm i bredd är stjärnformade med smala sepaler och petaler med en liten tandliknande struktur vid spetsen. Läppen liknar sepalerna och petalerna. Blommorna är kortlivade, står bara några dagar, självpollinerande utom hos några enstaka arter där bin får ståndarknapparna att släppa sitt pollen.

!Skötsel
Arterna växer i skyddade skogsområden i fuktig till väldränerad jord, inklusive sand, grusiga lerjord och ren lerjord. De förekommer från djup skugga till skogsbrynens soligare miljöer, ibland nära vattendrag.
Alla arter är sällsynta, ingen återfinns i odling, och en del är kända bara från ett fåtal gamla herbariumsamlingar. Det verkar inte vara möjligt att föröka dem utom från frö.

!Taxonomi
''Underfamilj'': Apostasioideae ''Tribus'': N/A ''Undertribus'': N/A

----
''Typart''
[[A. odorata|eb8d9bc3-5dd3-4283-8a80-046521c52f87]] Blume (1825)

----
''Uttal''
a-pos-STAY-see-uh

----
''Synonymer''
__Heterotypic Synonyms:__
//Mesodactylis// Wall. (1830)
//Niemeyera// F.Muell. (1867)
//Neumayera// Rchb.f. (1872)
//Adactylus// Rolfe (1896)

!Rekommenderad läsning
[[Wikipedia|https://en.wikipedia.org/wiki/Apostasia_(orchid)]] 2015-11-18
[[Australian National Botanic Gardens|https://www.anbg.gov.au/cpbr/cd-keys/orchidkey/html/genera/Apostasia.htm]] 2015-11-18
[[University of Amsterdam|http://dare.uva.nl/cgi/arno/show.cgi?fid=566466]] 2015-11-18
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=102345]] 2015-11-26

;A. Kocyan, Y.-L. Qiu, P. K. Endress, and E. Conti, 2004
://A phylogenetic analysis of Apostasioideae (Orchidaceae) based on ITS, trnL-F and matK sequences//
: Plant Syst. Evol. 247: 203–213. doi:10.1007/s00606-004-0133-3.
;E.F. de Vogel. 1969
://Monograph of the tribe Apostasieae (Orchidaceae)//
:Blumea 17:312–350
:http://dare.uva.nl/cgi/arno/show.cgi?fid=566466


























































''Etymology:'' 
From the common indigenous name Gavilu, used to designate one species.
















































































!Allmänt och utbredning
//Masd. decumana// [maz-de-VAL-lee-uh dek-yoo-MAH-nuh] är en miniatyrepifyt som växer i Perus och Ecuadors molnskogar mellan 1000 och 2500 meters höjd.
Det latinska ''decumana'' betyder "storväxt" och syftar på blommans storlek i förhållande till plantan.

!Utseende
Det är en liten, kompaktväxande art som saknar pseudobulber utan de ensamma, runda bladen kommer direkt från en svartaktig jordstam. Blomningsperioden infaller framförallt under vintern då det kommer fem till sex cm långa, upprätta blomstänglar från basen av bladet. Den relativt stora, ensamma blomman hålls under eller precis i höjd med bladen och blir fyra till sex cm stor med långa sepaler som sträcker sig ännu längre. Blomman har en trekantig from och ljus grundfärg med sepalerna översållad av mörkt röda prickar. 

!Skötsel
Den är svalväxande och föredrar en skuggig växtplats med hög luftfuktighet och bra luftcirkulation. Knopparna fäller lätt av om luftfuktigheten är för låg. Försök ge den en temperatur mellan fem och 20 grader med en relativt hög temperatursänkning nattetid på gärna åtta och tio grader. Den är dock temperaturmässigt tolerant och kan vänja sig vid högre temperaturer.
Odla den monterad eller i en mix av hackade sphagnum, fin barkkompost, perlite och trädormbunke. Plantera om regelbundet så inte komposten bryts ner för mycket. Håll komposten fuktig med ständiga vattningar, låt den inte torka ut. Skölj igenom komposten med vatten av bra kvalité, R/O eller regnvatten är bäst, och göd med svag gödning ofta.
Den stressas lätt, till exempel om komposten är för blöt och rötterna inte mår bra, om temperaturen är för hög eller om den flyttas, och fäller då ofta bladen.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/masdecumana.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Masdevallia_decumana]]
[[OrchidKarma|http://orchidkarma.com/the-darling-decumana/]]





























































!Allmänt och utbredning
//Phrag. lindleyanum// [frag-muh-PEE-dee-um lind-lee-AY-num] växer terrestriskt eller litofytiskt i fuktiga områden på sandsten nära vattenfall eller översvämningsområden i Surinam, Guyana och i Venezuela nära Mt. Roraima mellan 750 och 2000 meters höjd.
Sir Richard Schomburgk samlade in den under en expedition i april 1839 och lät uppkalla arten efter den välkände brittiske botanikern John Lindley (1817-1898) som var den förste att beskriva den vetenskapligt. Taxonomiskt tillhör den sektionen Platypetalum. Kromosomtalet är 2n=22.

!Utseende
Den saknar, liksom de andra arterna inom släktet, pseudobulber utan bildar en solfjäder med fyra till sju långsmala, styva blad, upptill 50 cm långa och tre till åtta cm breda. Bladen har ofta gula kanter och rödaktiga mot basen. Under hösten och vintern kommer från mitten av ett fullväxt skott en mer än meterlång och drygt en cm tjock blomstängel som bär två till 30 blommor i sekvens efter varandra, vanligen med bara en öppen åt gången. Blommorna blir drygt åtta cm stora, med gröna eller gulgröna sepaler och petaler. Petalerna har purpurfärgade nerver och kanter.  Den ljust gulbruna läppen har purpurfärgade nerver och ljust lila fläckar på sidorna.

!Skötsel

I den miljö plantorna naturligt växer får de full morgonsol och cirka 60% skugga för resten av dagen. God luftcirkulation och svala vindar ger en temperatur mellan 17 grader på natten och upptill 26 grader dagtid. Rötterna hålls konstant fuktiga av stänk och rinnande vatten tillsammans med tät dimma under kvälls- och morgontimmarna. Håll den fuktig hela tiden, så länge komposten inte är för nedbruten kan den tolerera nästan hur mycket vatten som helst. Använd rent vatten av god kvalité och ge bara svag gödning, den är känslig för uppbyggnad av salter.
Odla i en väldränerad, sur mix som håller ett pH mellan tre och fyra, med medelgrov barkkompost och perlite eller sphagnum och perlite.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium lindleyanum// M.R.Schomb. (1830)
//Selenipedium lindleyanum// Rchb.f. (1854)
//Paphiopedilum lindleyanum// Pfitzer (1894)
__Heterotypic Synonyms:__
//Selenipedium kaieteurium// N.E.Br. (1885)
//Selenipedium lindleyanum// var. //kaieteurium// Cogn. (1893)
//Phragmipedium kaieteurum// Garay (1979)
//Paphiopedilum kaieteurum// V.A.Albert & Börge Pett. (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phraglindleyanum.htm]] 2015-10-23
[[Orchid photographs by Gary Yong Gee|http://www.yonggee.name/Notes/Phrag_lindleyanum.htm]] 2015-10-23
[[Slipperorchids.info|http://slipperorchids.info/phragdatasheets/lindleyanum/index.html]] 2015-10-23
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=176]] 2015-10-23
[[Orchids Wiki|http://orchids.wikia.com/wiki/Phragmipedium_lindleyanum]] 2015-10-23
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:152875]] 2015-10-23


































































































































































































































!Allmänt och utbredning
Denna svalväxande art växer epifytiskt i höglandsskogar i Ecuadors del av bergskedjan Cordillera del Condor mellan 1800 och 2000 meters höjd.
Artepitetet kommer från det grekiska ''dilemma'', en anspelning på de två-hornade bladen.

!Utseende
Det är en liten planta med en slank, upprätt bladstjälk, vid basen omsluten av två täckblad. I toppen bär den ett ensamt, långsmalt blad, kluven mot basen i två "horn" som gett arten dess namn. Liknar mycket två bönbaljor som är ihopfästa på mitten. "Hornen" bildas inte förrän bladen har mognat och är redo att bilda blommor. Bladen är mycket styva, halvrunda eller nästan u-formade i genomskärning, upptill 18 cm långa, med den oansenliga, knappt två cm stora blomman vilande i rännan längs mittnerven på ovansidan av bladet mot bladstjälkens fäste. Den ensamma blomman håller bara två till fyra dagar, men den kan bilda nya blommor successivt när som helst under året utom när det är varmt. Blomman är purpurfärgad och tätt beströdd med tunna hår, men är i sig inte speciellt anmärkningsvärd, men växten som sådan är omöjlig att missta för någon annan art inom släktet.

!Skötsel
Det är en svalväxande art som växer mycket långsamt, bara ett nytt blad per år tills den blivit så stor att den fått uppemot ett dussin blad. Om den trivs kan de producera fler blad, kanske så många som tre till fem nya blad varje år.
Den bör hållas nästa helt torr mellan vattningarna. Om den står för fuktigt dör rötterna och de nya skotten väldigt lätt.
Försök ge den en nattemperatur ner till tio grader och en halvskuggig växtplats.
Många verkar föredra att odla den monterad men det går lika bra i kruka, under förutsättning att komposten inte blir för blöt. Var försiktig vid omplantering, blad och stjälkar bryt lätt av och det tar tid innan den återbildat förlorade blad.

!Synonymer
__Homotypic Synonyms:__
//Acronia dilemma// Luer (2005)
//Zosterophyllanthos dilemma// Szlach. & Kulak (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurdilema.htm]]
[[Royal Horticultural Society|http://www.rhs.org.uk/Plants/RHS-Publications/Journals/The-Orchid-Review/2008-issues/September---October/Pleurothallis0908]]






































!Allmänt och utbredning
Det är en stor, hängande epifyt som växer i de svala och fuktiga bergsskogarna i sydvästra Colombia mellan 1600 och 2200 meters höjd över havet.
Artepitetet anspelar på bladen blåaktiga färgton.

!Utseende
De saknar pseudobulber utan bladen kommer direkt från den underjordiska stammen. De hängande bladen som kan bli en halv meter långa har en stålblå till gråaktig färgton och är avsmalnande mot basen. Bladbasen är omgiven av ett tunt täckblad. Blomstängeln kommer från bladbasen och blir fem cm lång, hängande. Den är purpurprickad och bär en enda, citrongul blomma med rött i centrum. Arten får en av de största, om inte de största, blommorna inom släktet. Med de långa spetsarna på sepalerna kan blomman bli över 20 cm lång. Doften den avger är av den mindre angenäma sorten. Den har ingen speciell blomningstid, men blommorna kommer vanligast under sommaren och hösten.

!Skötsel
De föredrar halvskugga och en sval placering med hög luftfuktighet. Får den för mycket sol tappar bladen sin karaktäristiska färg och gulnar. Odla plantan monterad eller i en kruka med en mix av fin barkkompost och perlite eller sphagnum. Vattna regelbundet och håll komposten fuktig. De odlas oftast upp-och-ner. Den behöver en sval placering och vintertemperaturen bör inte överstiga tolv grader.

!Synonymer
__Homotypic Synonyms:__
//Byrsella caesia// Luer (2006)
__Heterotypic Synonyms:__
//Masdevallia deorsum// Rolfe (1900)
//Masdevallia metallica// F.Lehmann & Kraenzlin (1925)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/mascaesia.htm]]
[[Species Specific|http://www.species-specific.com/view-orchid-species-information.php?id=52]]
[[Orchidés en Nord|http://www.orchid-nord.com/Masdevallia/Masdevallia_caesia/masd_caes.htm]] bilder



!Allmänt och utbredning
//Anguola// är ett sympodial släkte från Sydamerika som växer terrestriskt eller epifytiskt i fuktiga molnskogar i Colombia, Venezuela, Ecuador och Peru, mellan 600 och 2200 meters höjd. Det finns <$view field="count"/> accepterade arter och fyra naturhybrider inom släktet. De är mycket nära besläktade med //[[Lycaste|8514d1dc-cbc5-4b0c-a8c4-d1b30dc04261]]// och //[[ 	Sudamerlycaste|50d95563-6f1a-4130-a2ee-3f247826722e]]//, tidigare //Ida//.
Släktet //Anguola// och de båda arterna //[[Ang. uniflora|3b7f3d3b-eb5c-4364-9c8c-b556be9526aa]]// och //[[Ang. virginalis|63094397-16c0-404b-ae94-cd77ec23bf79]]// upptäcktes 1779 i Peru av Don Hipólito Ruiz López, Don José (eller Joseph som han valde att kalla sig) Antonio Pavón och Joseph Dombey under en tio årig expedition till de spanska kolonierna Peru och Chile under påbud av kung [[Karl III av Spanien|http://sv.wikipedia.org/wiki/Karl_III_av_Spanien]]. De åtföljdes av artisterna José Brunete och Isidoro Gálvez, mr Gálvez var den som ansvarade för den målning av //[[Ang. uniflora|3b7f3d3b-eb5c-4364-9c8c-b556be9526aa]]// som 1794 låg till grund för beskrivningen av släktet av Tuiz & Pavon.
Namnet gavs för att hedra Francisco de Angulo, gruvchef i Peru som samlade orkidéer som hobby och kom att bli till stor hjälp för Ruiz och Pavón. De är också kända som ''Orchid Tulip'', ''Cradle of Venus'' med flera namn.

!Utseende
De är stora plantor med stora, tunna blad som kan bli över en meter långa och 80 cm breda med längsgående veck. De mörkgröna, köttiga pseudobulberna kan i vissa fall bli mycket stora, upptill 20 cm, men oftas som hönsägg. Från basen av varje bulb utvecklas två till fyra blad som fälls på hösten. Från basen av de nya bulberna kommer också de blomställningar som bär en enda blomma per blomställning. Arter med vita blommor producerar sex blomställningar men andra arter kan producera så mycket som ett dussin blomställningar med kopplika blommor, vanligen under våren. Blommorna kommer i två färger, grönvita eller med nyanser från gult till rött, och doftar starkt av eucalyptusolja eller vintergröna. Sepaler är kupiga som hos en tulpan. Läppen är treflikad och könspelaren har fyra pollinier.

!Skötsel
Släktena //[[Lycaste|8514d1dc-cbc5-4b0c-a8c4-d1b30dc04261]]//, //[[ 	Sudamerlycaste|50d95563-6f1a-4130-a2ee-3f247826722e]]// och //Anguloa// odlas alla likartat. Det viktigaste kravet är sval, fuktig luft under hela året och kopiösa mängder vatten under växtsäsongen. Försök hålla minst en temperatur på tio till 15 grader nattetid och en dagtemperatur runt 17 till 20 grader under vilan. Under sommaren bör temperaturen hållas under 30 grader.
//Anguloa// som är terrestriska kan odlas i jordbaserade komposter men den måste vara väldränerad, till exempel en del perlite och en eller två delar grovhackad sphagnum, eller till och med planterad i ren leca. Ett tredje förslag på kompost är två delar medelgrov bark, en del fin bark och en del kol, med mindre andel medelgrov bark för små plantor. Omplanteringen görs bäst när plantan är i sin viloperiod eller när den nya tillväxten precis börjar på våren, så de nya rötterna kan växa ner i ett fräscht medium. De kan gärna planteras om en gång om året men inte mer sällan än varannat år, de klarar inte uppbyggnad av salter i komposten. Om det börjar bildas en vit kalciumbeläggning överst i komposten eller på sidorna av krukan, plantera om omeddelbart. Hemligheten med att lyckas med släktet är att inte störa rötterna under den aktiva tillväxtfasen och fräsch, frisk kompost. Behåll minst tre bulber vid omplantering, i annat fall tar plantan alltför lång tid på sig att komma igen. Placera de äldsta bulberna mot krukans kant med det nyaste skottet ungefär i mitten av krukan så det finns plats för ytterligare ett års tillväxt. Gamla bakbulber kan plockas av i par och planteras halvt nergrävda i en sphagnumrik kompost för att bilda nya skott.
Rötterna är tätt beklädda med tunna hår som mångdubblar den vattenupptagande ytan. Om plantan hålls för torrt, torkar dessa hår bort och plantan får svårare att ta upp vatten. Vattna med stora mängder vatten varje gång och använde en svag dos gödning under tillväxten. Skölj igenom komposten med rent vatten med jämna mellanrum för att minska saltuppbyggnaden. Arter som fäller bladen under vintervilan måste ha en gradvis minskning av vattningen under hösten och vintern för att vila helt torrt under minst tre veckor på senvintern. Börja vattna igen när de nya skotten och blomstänglarna börjar komma fram.
Ge plantan en ljus växtplats utan direkt solljus.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Lycastinae

''Typart''
//[[Anguloa uniflora|3b7f3d3b-eb5c-4364-9c8c-b556be9526aa]]// Ruiz & Pavón (1794)

''Uttal''
an-gyoo-LOW-ah

''Synonymer''
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/angtognettiae.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Anguloa]]
[[Wikipedia|http://en.wikipedia.org/wiki/Anguloa]]
[[A key to the Anguola species AND their Natural Hybrids|http://www.orchidoman.net/NGULOAKey.html]]
[[Larry's Orchids and Tropical Plants|http://www.larrysorchids.com/culturesheets/orchids/Anguloa.pdf]]











































!Allmänt och utbredning
Släktet //Rodriguezia//, förkortat //Rdza.//, är ett släkte med <$view field="count"/> epifytiska eller litofytiska arter som växer i neotropikerna, från södra Mexiko till nordvästra Argentina, med sin huvudsakliga utbredning i de fuktiga tropiska skogarna i Brasilien. De är nära släkt med [[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]].
Det beskrevs först av de spanska botanikerna H. Ruiz och J. Pavón 1794, och är döpt efter den spanske botanikern Manuel Rodriguez.

!Utseende
De flesta arterna har korta blomställningar, men tre brasilianska arter, //[[Rdza. decora|9c808e9a-e897-4c35-915f-065fbcc21e04]]//, //[[Rdza. obtusifolia|89770511-36a0-44df-bd12-91ff07199ebb]]//, och //[[Rdza. rigida|88b93606-b036-42bd-bf97-959fddc89c90]]//, har långa. Läppen bildar två lober. Läppens bas, sepalerna och delar av könspelaren bildar den nektarbärande sporren som kan vara lång eller kort.

!Skötsel
De flesta av arterna inom släktet växer som epifyter på kvistar och grenar i utsatta och störda habitat. Växten föredrar sval till varm temperatur och indirekt ljus. De trivs bäst monterade eller i en väldränerad kompost. Minska vattningen under vintern.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Oncidiinae

''Typart''
//[[Rdza. lanceolata|74c62463-eee6-4680-bfd7-5de1e22ba224]]// Ruiz & Pavón (1798)

''Uttal''
rod-ri-GEEZ-ee-ah

''Synonymer''
__Heterotypic synonym:__
//Burlingtonia// Lindley (1837)

!Rekommenderad läsning
[[EPIDENDRA|http://www.epidendra.org/taxones/Rodriguezia/Rodriguezia%20pulcherrima/Bogarin%20et%20al.%202008%20Rodriguezia.pdf]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Rodriguezia]]
















!Allmänt och utbredning
Arten påträffas epifytiskt i varma, fuktiga områden från Yucatan-halvön i Mexiko söderut genom Guatemala, Honduras, Costa Rica, Panama, Trinidad, Venezuela, Brittiska Guyana, Brasilien, Colombia och Peru, vanligen under 1000 meters höjd. Arten växer ofta i mycket sura betingelser på eller i myrbon där den drar nytta av de aggressiva myrorna skydd från insekter och skadedjur.
Arten är nära besläktat med //[[Crths. speciosa|220e492b-f848-41b2-8d54-5d23c3a784bd]]// som framförallt skiljer sig genom att ha helgula blommor med röda fläckar på insidan av läppen och ett mer kompakt växtsätt.
Det latinska artepitetet ''picturata'' betyder "anmärkningsvärd" och syftar förmodligen på den fantasieggande blomman.

!Utseende
Arten bildar täta bestånd och kan bli så stor som 70 cm hög med sju till 15 cm stora pseudobulber. Bulberna är avlångt smala med längsgående upphöjda räfflor och med två avlånga, mellan 30 och 55 cm långa, utdraget spetsiga blad i toppen. Bladen är stelt läderartad med tre till fem framträdande nerver. Under sommaren och hösten kommer blomstängeln som kan bli upptill 60 cm lång och växer nedåt från de nya bulberna, genom komposten och ut på undersidan av den korg eller kruka den odlas i. Varje stängel bär vanligen två till fyra doftande blommor, cirka 13 cm stora, som bara håller några dagar. Blommorna är variabla i färg men är oftast gulbruna med med mörkröda prickar. Sepaler och petaler är ljust gula med rödbruna prickar. Den hjälmlika läppen är gulaktig till gulbrun.

!Skötsel
Ge den en varm och halvskuggig växtplats, mellan 19000 till 26000 lux, gärna med morgon eller kvällssol. I sitt naturliga habitat varierar temperaturen från drygt 29 grader dagtid till 18 grader på nätterna hela året runt. Nederbörden är kraftig större delen av året med två till tre månader något torrare i slutet av vintern och tidig vår. Håll den jämnt fuktig under tillväxten och ge svag gödning ofta. Vattningen kan reduceras något under vintern men den får inte torka ut helt.
Plantera i en sur, vattenhållande mix av medelgrov barkkompost och sphagnum med perlite. Myrornas bon som den växer på i naturen innehåller stora mängder myrsyra och håller ett pH runt tre. Använd en gärna en öppen, hängande korg så blomstängeln kan komma till sin rätt.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/corypicturata.htm]] 2015-08-06
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS197.html]] 2015-08-06
[[Orchids Wiki|http://orchids.wikia.com/wiki/Coryanthes_picturata]] 2015-08-06















!Allmänt och utbredning
//Phal. philippinensis// är en art endemisk för skogarna kring berget Sierra Madre på nordöstra sidan av ön Luzon i Filippinerna. Där växer den epifytiskt i täta skogar upptill 1200 meters höjd, lågt ner på trädstammar med tätt, fuktig mossa, skyddad från direkt solljus av ett tjockt lager trädkronor.
Den är känd sedan sextiotalet men ansågs länge vara likställd med //Phalaenopsis// x //leucorrhoda//, en naturlig hybrid mellan //[[Phal. aphrodite|97c85d66-b71b-42c5-ad6d-24c1e430f796]]// och //[[Phal. schilleriana|67c3e2c9-0417-46b8-a7ac-65068bd7a198]]//. Först 1984 beskrevs den på engelska och 1987 blev den officellt godkänd som en egen art då den beskrevs på latin.
Artepitetet anspelar förstås på dess växtplats.

!Utseende
Den har avlånga, mörkt gröna blad vackert mönstrade i silver och grått som kommer från noder på en väldigt kort stam. Blomstängeln kommer vanligen under vintern och är upprätt till hängande, lång och grenad som bär ett flertal blommor. Blommorna blir drygt sju cm stora, är rent vita eller med en svag anstrykning av rosa och svagt doftande av tall. Efter att blommorna vissnat händer det ofta att det kommer ett nytt sidoskott på stängeln för ytterligare en blomsterfägnad så klipp inte blomstängeln för tidigt.

!Skötsel
Arten är varmväxande. Odla den monterad eller i krukor med en mix av medelgrov barkkompost och sphagnum. Håll den i ljus halvskugga och vattna ungefär en gång i veckan med svag gödning. Håll komposten fuktig men inte våt. Minska vattningen under vintern. I sitt naturliga habitat finns bara två säsonger, den torra, varma sommaren och den regniga monsunperioden.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phalphilippinense.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Phalaenopsis_philippinensis]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Phalaenopsis_philippinensis]]





































































































































!Allmänt och utbredning
//Coel. fimbriata// [koh-el-LAW-jin-ee fim-bry-AH-tuh] är en småväxt, klättrande art som växer epifytiskt i låglandsskogar eller litofytiskt i sprickor på kalkstensklippor längs vattendrag i sydöstra Asien från Nepal, provinserna Bhutan, Fujian, Guangdong, Guangxi, Guizhou, Hainan, Jiangxi, Sichuan, Xizang och Yunnan i Kina, Hongkong, nordvästra Indien, Myanmar, Thailand, Cambodia, Laos, Vietnam och ner genom Malaysia från havsnivå upp till 1500 meters höjd.
Den är så variabel i sitt utseende att flera forskare har beskrivit den som flera olika arter och det är först nu med den moderna DNA-tekniken som härvan kan börja redas ut. Det har föreslagits att //Coel. fimbriata// och //[[Coel. ovalis|e97c38ff-9bac-4a37-aa92-fa1a170b8c30]]// alla i grund och botten är en och samma art, nämligen //Coel. fimbriata//.
Den är också så tålig att det var en av de första orkidér som överlevde resan från Kina till England på 1800-talet.
Arten pollineras i naturen uteslutande av honbin av ett //Vespula//-släkte. Bina lockas av doften med löfte om mat men finner ingen nektar.
Namnet kommer från latinets ''fimbriatus'' som betyder "med fransar" och anspelar på läppens hårförsedda kanter. 

!Utseende
Den har ett klättrande växtsätt med tunna, krypande rhizom som snart brer snart ut sig över all tillgänglig yta. De ovalt äggformade pseudobulberna blir mindre än tre cm stora och kommer med tre till fyra cm mellanrum på ett tunt rhizom. Bulberna bär två stycken fem till tio cm långa och två cm breda blad i toppen. Under ett par månader på hösten kommer en fem cm lång blomstängel som bildar en till tre stycken fyra cm stora gurkdoftande, långlivade blommor som hålls ovanför bladen under två till fyra veckor. Blommorna är ljust gulgröna med kanten av läppen fransad och hela läppen randig i rödbrunt. Sepalerna är lansettlika med spetsig topp, cirka två cm lång och sex mm bred. Petalerna är trådformigt långsmala, två cm långa och läppen två cm lång och tolv mm bred med fransiga kanter och upprättstående sidolober. Längs hela mittdelen av läppen löper två parallella, rödbruna lameller. 

!Skötsel
Det är en tacksam art som är lätt att odla och få i blom, en riktigt bra nybörjarorkidé och de många varianter och former som finns kan ge upphov till en hel samling bara de.
Den kan odlas monterad eller i en kruka eller hängande korg med väldränerad kompostmix av fin barkkompost, trädormbunke och perlite eller sphagnum. Ge den en skuggig, fuktig och frostfri växtplats för bästa tillväxt. Den klarar både svala, intermediära och lite varmare temperaturer. Med sitt klättrande växtsätt kommer den snart att växa ur vad den än planteras i och bildar mycket luftrötter som hänger över kanten på krukan. Det är dock ingen brådska att plantera om, den verkar trivas att växa på detta sätt under flera år och tycker inte om att störas i onödan. Som för alla orkidér med mycket luftrötter behövs hög luftfuktighet. Om rötterna torkar ut, börjar de dö. Efter ett tag kommer det vara mer bladmassa än de kvarvarande rötterna kan förse med vatten och en planta ur balans kommer snart gå under.
För att föröka den räcker det att plantera en reva med minst fyra bulber, helst under försommaren för att den ska få bästa starten i livet.
Under tidig vår när de flesta andra arter ska börja blommar går //Coel. fimbriata// i vila under ett par månader. Bladen gulnar och faller av. Minska då vattningen till en gång var annan vecka och ställ den svalt, runt tio grader men den kan klara temperaturer ner till nollan. När den nya tillväxten börjar synas med nya små rötter kan vattningen ökas igen. Under sommaren kan den gärna vattnas varannan dag, beroende av valet på komposten.

!Synonymer
__Homotypic Synonyms:__
//Pleione fimbriata// Kuntze (1891)

!Rekommenderad läsning
[[Coelogynes.com|http://coelogynes.com/Species%20Coel%20fimbriata.html]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelfimbrata.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Coelogyne_fimbriata]]
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Coelogyne-fimbriata&lang=en]]
[[Annals of Botany|http://aob.oxfordjournals.org/content/104/3/565.full.pdf]] 104: 565-571, 2009

























!Allmänt och utbredning
//Phragmipedium besseae// [fraig-mi-PEE-dee-um BESS-ee-ay] är en liten terrestrisk eller litofytisk art som är inhemsk för de fuktiga bergsskogarna på de östra sluttningarna av Anderna i Colombia, Ecuador och norra Peru, där de växer på klippor längs vattendrag från 1000 till 1500 meters höjd över havet.
Den upptäcktes första gången i Peru 1981 av Elizabeth Locke Besse, amerikansk orkidésamlare, som arten även namngavs efter. Snart efter upptäckten plundrades och förstördes växtplatsen av orkidésamlare. Tursamt nog fanns frön bevarade, annars hade arten utrotats i samma veva som den upptäcktes. Den är ovanlig i och med sin klarröda färg som tidigare inte fanns inom //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]// och har skapat ett nytt intresse för släktet och hybriderna som arten har bidragit till.

!Utseende
Plantorna saknar pseudobulber. De bildar en bred solfjäder av sex till tio upptill 30 cm långa, två till fem cm smala, mörkgröna blad som är eliptiska till formen. Längs hela bladets längd har den en längsgående köl. Blomstängeln kan bli en halvmeter lång med en till sex blommor som slår ut successivt i toppen av stängeln. Hos äldre exemplar kan stängeln även förgrenas. De runda blommorna, som kommer under vintern eller tidig vår när temperaturen är lägre, blir mellan sex till nio cm stor, med färgvarianter från klarrött till orange och gult. Blommans egentligen grundfärg är gul och //alba//-varianten saknar helt enkelt den röda pigmenteringen. Blommorna kan hålla ett par veckor vardera och en stängel kan vara i blom tre månader eller mer på en välmående planta.

!Skötsel
I sitt naturliga habitat växer //Phrag. besseae// gärna på klippor nära vattendrag där rötterna är utsatta för stänk och fukt så gott som hela tiden. Ge den jämn fuktighet och till skillnad från de flesta andra orkidér kan den gärna stå i lite vatten, men den behöver bra vattenkvalité, allra helst R/O- eller regnvatten fritt från kalk. Försök att vattna varje dag, det är i stort sett omöjligt att övervattna dem. Skölj igenom komposten ofta och rejält. Det allra bästa är en bricka med rinnande vatten, till exempel en akvariepump som pumpar runt vattnet. Ge svag näring under våren och en liten bit in på sommaren, den kan vara känslig för övergödsling. Hög luftfuktighet och -cirkulation gynnar också plantan, risken är annars att den drabbas av röta eller andra sjukdomar.
De trivs i en temperatur mellan 21 och 27 grader med nattemperaturen runt sju grader svalare. Lägsta temperaturen vintertid bör inte understiga tolv grader. Svalare temperaturer under höst och vinter initierar knoppsättningen och ger finare färger på blommorna.
Ge den en ljus växtplats under tillväxtperioden där den inte utsätts för brännande sol. Som för //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// eller lite mer, 10000 till 20000 lux är lagom. Ett skuggat söderfönster eller ljust östfönster passar bra. Under sommaren kan den med fördel placeras ute, skyddad från den starka middagssolen. Med rätt odlingsbetingelser kan den snabbt bilda ett stort exemplar.
De bildar långa rhizom som lätt klättrar ut ur krukan de är planterade i. Använd höga, smala krukor eller böj försiktigt tillbaka rhizomen ner i komposten igen innan de börjar bilda rötter. Plantera i en mix av fukthållande kompost som sphagnum och fin barkkompost. Plantera om åtminstone varje år, eftersom komposten hela tiden är fuktig bryts den snabbt ner.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum besseae// V.A.Albert & Börge Pett. (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragbess.htm]]
[[Orchidéhuset|http://www.orchidehuset.se/index.php/phragmipedium-besseae]] 2015-02-09
[[Orchid Care Tips|http://www.orchid-care-tips.com/phragmipedium-besseae.html]]
[[OrchidBoard|http://www.orchidboard.com/node/122]]
























!Allmänt och utbredning
//Renanthera//, förkortat //Ren.//, är ett släkte med <$view field="count"/> epifytiska eller mer sällan terrestra arter från Kina, genom sydöstra Asien, Indien till Nya Guinea, Solomon öarna och Filippinerna. I sydöstra Asien förekommer fyra arter i Thailand, tre i den malaysiska övärlden, två på Sumatra och Java och fem på Borneo, med tre endemiska. Endast sex arter förekommer utanför sydöstra Asien, tre i Kina, en i Taiwan och två i Indien och Nya Guinea till Solomon öarna eftersom medlemmarna i detta släkte föredrar ett jämnt klimat. I Singapore har endast två arter påträffats, vilka båda anses utdöda i det vilda. Många arter inom släktet är endemiska inom små områden med väldigt specialiserade habitat.
Släktnamnet //Renanthera// föreslogs från början av den portugisiska missionären, fysikern och botanikern João de Loureiro 1790 när han beskrev typarten //[[Ren. coccinea|f9fe86dc-4ea0-4343-a16b-c04ea5356d6f]]//. Namnet är sammansatt från de grekiska ''renes'' som betyder "njure", och ''anthera'' som betyder "horn" och anspelar på de njurformade pollinerna.

!Utseende
Arterna inom släktet saknar pseudobulber för vattenhushållning. De flesta arterna blir stora, monopodiala epifyter med långa, klättrande stammar och läderartade, ovala blad. Plantan producerar en grenad blomstängel med otaliga, stora blommor i färger från gult och orange till rött med prickar eller fläckar i rött och lila. Blommorna har stora laterala sepaler.

!Skötsel
Arterna inom detta släkte behöver ett intermediärt till varmt klimat, 24 till 29 grader dagtid och ner till 20 grader under natten, med hög luftfuktighet och god luftcirkulation. Arterna inom //Renanthera// kräver mycket ljus hela året för att blomma. Faktum är att //[[Ren. elongata|c5cdb7ac-fd9d-4c02-8544-8e43371da590]]// blommar först sedan de nått upp till trädkronan där de är helt exponerade för den starka solen. På malaysiska kallas denna art för ''pokok api sesuda'' som kan översättas med "träd i brand" efter sina spektakulära röda blommor som kan täcka trädkronan de lever i.
Deras klättrande växtsätt innebär att de trivs bäst monterade eller i en hängande korg, med daglig vattning, samma som för //[[Vanda|58f9face-6d6b-4352-b886-8fcddc1ec749]]//. Om de odlas i kruka måste de ha en grov, mycket väldränerad, kompost. Göd kraftigt varje vecka under den aktiva tillväxten och mindre under de svalare månaderna. Till skillnad mot vandorna vill de ha mindre vatten och gödning efter att blomningen upphört.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Vandeae
''Undertribus'': Aeridinae

''Typart''
//[[Ren. coccinea|f9fe86dc-4ea0-4343-a16b-c04ea5356d6f]]// Loureiro (1790)

''Uttal''
ren-AN-the-ra

''Synonymer''
__Heterotypic Synonyms:__
//Nephranthera// Hassk. (1842)
//Renantherella// Ridl. (1896)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Renanthera]]
[[Tip of Texas Orchid Society|http://www.totos008.com/TOTOS/Pages/Archived_Articles/Renanthera.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Renanthera]]
[[SOBHA ORCHIDS|http://www.sobhaflowers.com/Renanthera.htm]]



































!Allmänt och utbredning
Arten finns som en sval till varmväxande terrest, litofyt eller epifyt från Mexiko söderut till Ecuador. Den växer på eller under träd i öppna eller halvöppna fuktiga låglandsskogar mellan 500 och 2500 meter över havet.
Det är en av de mindre maxillarerierna, med kompakt växtsätt.

!Utseende
De ovala pseudobulberna kommer på ett grenat eller ogrenat rhizom som bildar hela mattor. Bulberna bär ett enda, långsmalt, gräsgrönt blad.
Den kan blommar när som helst under året, men vanligtvis under vintern. Blomman blir bara en dryg cm och kommer på en fem cm lång blomstängel. Blomman håller länge och har kraftiga färger, men den kan vara väldigt variabel i färgen från rent gul, orange eller röd till rödbrun eller nästan svart.
De har en svag citrus doft under morgontimmarna.

!Skötsel
Plantan vill växa svalt med lätt skugga. Håll den jämnt fuktig.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria variabilis// Bateman (1837)
__Heterotypic Synonyms:__
//Maxillaria variabilis// var. //unipunctata// Lindl. (1838)
//Maxillaria angustifolia// Hook. (1841)
//Maxillaria lyonii// Lindl. (1845)
//Maxillaria revoluta// Klotzsch (1852)
//Maxillaria variabilis// subvar. //lutea// A.H.Kent (1893)
//Maxillaria chiriquiensis// Schlechter (1922)
//Maxillaria panamensis// Schlechter (1922)
//Maxillariella variabilis// var. //unipunctata// Solano (2011)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxivariablis.htm]]
[[Orchids Online|http://www.orchidsonline.com.au/species1457.html]]
[[Photographing Orchids|http://www.orchidphotos.org/images/orchids/PeninsulaShow05/image067.htm]] bild






















































































































































































The genus Oberonioides Szlach contains only 2 species, which are known from very rare herbarium specimens and/or preserved liquid collections, but not frequently from sparse field records. Nothing is known about their cultivation. Although details about their ecology, phenology and natural occurrence are also very poor, it is known that they are terrestrial or lithophytic plants, forming rather sparse and dispersed colonies. The orchids grow in forests and/or on damp rocks, and usually occur at elevation 200-1800 m.
The most distinguished Oberonioides features, unique within subtribe Malaxidinae mor&shy;phology, are the omamentation of the lip and gynostemium, which probably resulted from adaptation to a specific kind (so far unknown) of pollinating Hymenoptera or Diptera insects.
Both species occur in South East Asia:
Oberonioides pusillus (Rolfe.) Marg. & Szlach. is restricted to SE China (Fukien, Jiangsi, Guangdong) and Taiwan, whereas Obero&shy;nioides oberoniiflora (SEIDENF.) SZLACH. is endemic to Thailand.

http://www.landesmuseum.at/pdf_frei_remote/ANNA_112B_0506-0508.pdf





























































!Allmänt och utbredning
Arten växer terrestriskt i ett litet område med basiskt stenkross på kalkstensklippor sluttande mot sydväst på norra Anderna i den peruanska delen av Amazonas, nära städerna Moyobamba och Tarapotomellan på mellan 1600 och 2100 meters höjd över havet.
Sedan den upptäcktes 2001 i Amazonas djungel i nordöstra Peru anses //Phragmipedium kovachii// av många som den viktigaste orkidéarter som hittats i den neotropiska regionen under de senaste 100 åren.
De första plantorna av arten upptäcktes av Faustino Medina Bautista i oktober 2001 på eller nära sin gård vid Moyobamba och Chachapoyas i norra Peru. Den 26 maj 2002 köpte J. Michael Kovach från Goldvein, Virginia, U.S.A. tre plantor från hennes orkidéstånd vid vägen till San Martín. Han förde en planta tillbaka till U.S.A. till Marie Selby Botanical Gardens i Sarasota Florida den 5 juni 2002. En formell beskrivning skrevs omedelbart av två anställda vid Selbys Orchid Identification Center, J.T. Atwood & S. Dalstron och en peruansk granskare, R. Fernandez. Beskrivningen utfärdades den 12 juni 2002 som ett komplement till Selbyana, trädgårdens vetenskaplig publikation. Detta slog publikation av Eric Christenson i Orchids, som publicerades 17 juni 2002, med fem dagar. Berättelsen om det kaos som följde Selbys beskrivning av en uppenbart olagligt importerad växt är väl nedtecknad i "The Case of the Purloined Orchid" (2005) och "The Scent of Scandal" (2012) av C. Pittman. Arten är uppkallad efter sin medupptäckare J. Michael Kovach.
Den är enda medlem av sektionen ''Schluckebieria'' inom släktet och det ska även finnas en //alba// eller nära-albino form.

!Utseende
Som för övriga arter inom släktet saknar den pseudobulber, utan bildar en solfjäder av långa, smala, båglikt hängande blad, i naturen upptill 60 cm långa och fem cm breda enligt insamlarna men i odling vanligen betydligt kortare. De bildar i naturen stora samlingar med tätt tillsammans växande plantor. På undersidan av bladet finns en köl längs bladets hela längd. Rötterna är tjocka, upptill fyra mm i diameter.
Blomstängeln kan bli uppemot 40 cm lång som höjder sig över bladverket och bär en ensam blomma. Då de växer i sitt naturliga habitat har två eller till och med tre blommor per stängel rapporterats. Blommorna blir stora, tio till 23 cm tvärs över, i färgstarka nyanser av mörkt rosa till kungligt purpur med en mer rödaktig läpp. En mycket intressant aspekt av denna art är det faktum att blomman fortsätter att växa efter öppnandet. Cirka en cm ytterligare bredd av blomman kan förväntas varje dag under de första dagarna efter öppnandet.

!Skötsel
Som för de flesta inom //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]// är vattenkvalitén viktig vid odling. I sin naturliga miljö i Peru får arten alkaliskt vatten, eftersom växterna växer på krossad kalksten. Detta står i skarp kontrast till de flesta andra arter inom släktet, som föredrar svagt surt vatten. Deras rötter hålls ständigt fuktig av nästan ständigt 13 gradigt vatten som sipprar och rinner över dem. Håll komposten jämnt fuktig under hela året med R/O- eller regnvatten. I sitt naturliga habitat får den i det närmaste dagliga, korta eftermiddagsregnskurar. Göd ofta med svag dos och tillsätt kalkpulver som till exempel finmalda ägg- eller snäckskal varannan månad.
God luftcirkulation är viktigt för att minska risken för röta. Den bör få ljus halvskugga utan direkt middagssol, skuggigare än för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//. 
Den genomsnittliga temperaturen under sommaren går som högst upp till 26 grader med en medeldygnstemperatur runt 17 grader. Under vintern går temperaturen inte över 18 grader.
Kompostmixen måste vara öppen och porös, en mix som ofta rekommenderas är upptill hälften halvcentimeter grovt grus med hackad trädormbunke, kol, perlite och små mängder barkkompost. Tillsätt gärna krossade äggskal eller snäckskal.

!Synonymer
__Heterotypic Synonyms:__
//Phragmipedium peruvianum// Christenson (2002)

!Rekommenderad läsning
[[Phragmipedium kovachii.com|http://phragmipediumkovachii.com/]]
[[PhragWeb|http://www.phragweb.info/phragmipedium/species/display_species_phrag.asp?phrag_id=160]]
[[Wikipedia|http://en.wikipedia.org/wiki/Phragmipedium_kovachii]]
[[SlipperOrchids|http://www.slipperorchids.info/phragdatasheets/kovachii/index.html]]
[[American Orchid Society|http://www.aos.org/images/img_content/PDFs/Phrag_kovachii.pdf]] 2015-10-24





!Allmänt och utbredning
Arten är endemisk för provinsen Tarlac på ön Luzon i Filippinerna, där den växer i mossan på marken i fuktiga skogar runt 700 meters höjd.
Den beskrevs två gånger under loppet av ett par månader av en franska och en tysk grupp, oberoende av varandra. Den liknar mycket //[[Paph. argus|0685359d-b27d-4aa3-bd8f-7260c0f72ce5]]//, //[[Paph. wardii|028b1115-c6ea-452e-9f6e-2319cd83c430]]// och //[[Paph. sukhakulii|a222411f-d5d5-4041-a0b4-34ea6412ed9f]]// till formen, blommans färg och bladens utseende. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Barbata.

!Utseende
Det är en medelstor art med 20 cm långa, smala, gröna blad mönstrade i grått på ovansidan. Undersidan är helgrön. Under vintern kommer den upprätta blomstängeln som kan bli upptill 20 cm lång och bär en ensam blomma. Blommorna blir drygt sju cm stor och ser ut som en grön variant av //[[Paph. superbiens|6c35bc33-ec75-4d33-bea4-e5fedbcfed28]]//. Den runda dorsala sepalen är vit med gröna ränder. De nedhängande petalerna är ljusgröna med bruna fläckar och läppen är ljusbrun till mörkbrun.

!Skötsel
Ge arten en intermediär temperatur i halvskugga med en hög luftfuktighet runt 60 till 80%. Odla i en väldränerad mix av medelgrov barkkompost och perlit. Plantorna är lätt att odla och växer bäst varmt och fuktigt. För att inducera blomning, minska vattningen en kort period under vintern.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum usitanum// O.Gruss & Roeth (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphparnatanum.htm]] 2015-06-04
[[Orchid Japan|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/newpaph9.html]] 2015-06-04
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_parnatanum]] 2015-08-10
















































































































!Allmänt och utbredning
Denna epifytiska orkidé återfinns i Sulawesi, Borneo och några av öarna i den malaysiska arkipelagen mellan 600 och 1200 meters höjd.
Arten får en av de största blommorna i släktet.

!Utseende
Varje pseudobulb bär endast ett blad. Den över halvmetern långa blomstängeln kommer under våren eller sommaren, och kan successivt bära upptill tio illaluktande blommor. Varje blomma blir 30 cm eller mer från spets till spets, i många olika färger från vinrött till rödbrunt. Den nedre sepalen är gulgrön med kopparröda veneringar. Läppen är mörkt röd och fint luden med en lång, tunn stavliknande tunga som guppar för minsta vindil.

!Skötsel
Den vill ha varma odlingsförhållanden med bra luftcirkulation, hög luftfuktighet och riklig vattning. De föredrar en placering med lätt skuggat till ljusa förhållanden och odlas bäst i krukor eller i korgar med en öppen kompost.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbechinolabium.htm]]





















































































































































































!Allmänt och utbredning
Den växer i djup lövkompost bland stenarna i skuggan under rhododendronbuskar på subalpina ängar eller i öppna barrskogar i Myanmar och provinserna Guizhou, Sichuan och Yunnan, i sydvästra Kina mellan 1100 och 3500 meters höjd.

!Utseende
Det är en miniatyrplanta med koniska pseudobulber och en väldigt ljust lila blomma. Framförallt läppen, men även i viss mån sepaler och petal, är översållad med stor och små lila stänk och markeringar. De rundade petalerna är karakteristiska för arten. De har heller inget gult på eller i läppen. Den upptill en och en halv dm långa blomstängeln bär oftast två blommor under senvintern eller tidig vår.

!Skötsel
Arten är en svalväxande terrestrisk //[[Pleione|1e3d43d5-efd2-44ea-ad0b-df6d8cf5951e]]//. Bulberna bör täckas nästan helt av en kompost med en hög andel mossa i. Rötterna är nämligen aktiva hela året hos //Pln. yunnanensis// och dessa behöver därför ha en något fuktig kompost även under vintern.

!Synonymer
__Homotypic Synonyms:__
//Coelogyne yunnanensis// Rolfe (1903)
__Heterotypic Synonyms:__
//Pleione chiwuana// Tang & F.T.Wang (1951)
//Pleione yunnanensis// var. //chiwuana// G.Kleinh. (2000)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleioneyunnanensi.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=yunnanensis&grupp=pleione&avdelning=artiklar_tradgardsorkideer&huvudavdelning=rad]]
[[the Pleione website|http://www.pleione.info/imagepages/species/pleione_yunnanensis.htm]] bilder


!Allmänt och utbredning
Det är en epifytisk art endemisk för östra Australien, tillhörande gruppen ''Dendrocoryne'' i släktet //Dendrobium//. I Australien växer den från Illawarraområdet till Cairns. Den trivs i öppna områden av regnskogar och områden längs vattendrag från havsnivå upp till 1500 meter över havet. I dess norra utbredningsområde är den begränsad till höglandet, men längre söderut är den mer spridd.
Namnet kommer från latinets ''gracilus'' som betyder "slanka stammar", och ''caulis'' som står för "stam" eller "stjälk".

!Utseende
I naturen bildar den små eller stora bestånd med långa smala stammar. Stammarna kan växa till att bli mer än 60 cm höga. Bladen är ovala eller lansettlika och kommer tre till sex alternerande i toppen av stammen.
Växten blommar som unga plantor under senvintern och våren. Som äldre kan den blomma när som helst under året. Plantan blommar med fem till 40 små blommor per blomstängel. Blommorna är gulgröna, med markeringar och fläckar i rött eller brunt, och inte större än en till två cm i diameter.

!Skötsel
Absolut full sol på hela växten. Som ung kräver den mer skugga. Ge plantan en distinkt, torr vintervila från mitten av hösten och håll upp med näringen tills den nya tillväxten syns på våren. Arten trivs bra utomhus under sommaren.
Den kan odlas monterad på korkek, levande träd eller i kruka i en grov barkmix. Förökning sker genom delning av rhizomet. Arten har ett finare rotsystem än många andra dendrobiumarter.

!Synonymer
__Homotypic Synonyms:__
//Callista gracilicaulis// Kuntze (1891)
//Tropilis gracilicaulis// Butzin (1982)
//Dendrobium macropus// subsp. //gracilicaule// P.S.Green (1986)
//Thelychiton gracilicaulis// M.A.Clem. & D.L.Jones (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dengracilicaule.htm]]
[[Australasian Native Orchid Society|http://www.anos.org.au/information/articles/species/dendrobium.htm#Dendrobium%20gracilicaule]]






























































































































































!Allmänt och utbredning
Arten växer som litofyt från Myanmar, provinserna Yunnan och Xizang i Kina och Assam i Indien över 3000 meters höjd över havet. Där växer de små plantorna på klippor och humustäckta block.

!Utseende
Det är en liten art som skiljer sig från //[[Pln. hookeriana|f3fa412f-cadc-4761-b53c-e7187e7f9897]]//, som den är närmast släkt med, bland annat genom att bladen nästan är fullt utvecklade när blomningen sker. Blommorna är ganska små, men helt underbart vackra. De är färgade från rosa till purpur och med mörkt lila markeringar. En fullt utvecklad bulb blomma vanligtvis med två blommor på varje stängel.
Detta är den enda vårblommande //[[Pleione|1e3d43d5-efd2-44ea-ad0b-df6d8cf5951e]]// som har två blad, alla andra har bara ett enda.

!Skötsel
Eftersom de i det vilda växer mellan 3000 och 4000 meters höjd är de mycket köldtåliga. De har en längre, svalare vinter och en kortare tillväxtperiod än andra arter inom släktet. Tillsammans med bland annat //[[Pln. coronaria|d81fd19b-da86-4a29-aba4-686d7d289fc7]]// bör de förvaras kyligt en längre period under vintern, förslagsvis i kylen om inget annat lämpligt förvaringsutrymme finns. Där bör de hållas till tidigt i mars, när det är dags för plantering. Håll ett öga på dem, och ta ut dem tidigare om de börjar blomma tidigare. 
Bulberna bör täckas nästan helt av en kompost med en hög andel mossa i. Rötterna är nämligen aktiva hela året hos //Pln. scopulorum// och dessa behöver därför ha en något fuktig kompost även under vintern. //Pln. scopulorum// är, till skillnad från andra //[[Pleione|1e3d43d5-efd2-44ea-ad0b-df6d8cf5951e]]//, känsliga för uttorkning under vintervilan, de får inte torka ut helt. I annat fall kommer de att skrumpna och dö.

!Synonymer
__Homotypic Synonyms:__
//Bletilla scopulorum// Schlecter (1924)
//Jimensia scopulorum// Garay & R.E.Schult. (1958)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleionescopularum.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=scopulorum&grupp=pleione&avdelning=artiklar_tradgardsorkideer&huvudavdelning=rad]]
[[the Pleione website|http://www.pleione.info/imagepages/thumbnailpages/scopulorum%20thumbs.htm]] bilder
[[the Wild Flowers of Tibet|http://www.tibet.cn/tibetzt/flower/huahui_en/05/05_46.htm]]




















































''Etymology:''
From the Latin bi, two, and pinnula, pinnule (the diminutive of pinna, a feather), in reference to the elaborated tips of the lateral sepals.

































































































!Allmänt och utbredning
Det är en terrestrisk art som är endemisk för öarna Panay och Negros i regionen Visayas, centrala Filippinerna, där den växer upp till 900 meters höjd över havet.
Arten är uppkallad efter Wilhelm Hennis, tyska orkidésamlare verksam i Sydamerika under 1800-talet som senare blev trädgårdsmästare i Hildesheim, Tyskland. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Barbata. Kromosomtalet är 2n=36.

!Utseende
Det är en liten, kompakt art med fyra till sex gröna blad mönstrad med en mörkare grön marmorering och ett distinkt veck längs mitten. Bladen kan mäta upp till 14 cm långa och tre cm breda. Blomstängeln som kommer under maj till juni är helt upprätt och höjer sig mer än 30 cm över bladen. Stängeln är lila, täckt med tunna, mjuka och bär bara en enda blomma. De sex cm stora blommorna har vita petaler med ljusgröna och mörkröda vertikala ränder. Läppen är djupt vinröd med brunsvarta nerver. Blommorna är mycket lik de hos //[[Paph. lawrenceanum|95d324e4-4af0-412e-9f1f-dac2b4142b44]]// men petalerna böjs nästan alltid uppåt-bakåt. Det finns även kända alba kloner i odling.

!Skötsel
Området där de växer är aldrig torrt och utsättes för kraftiga regn under vår och sommar, lätta regn under hösten, och en torr vinter med bara hög luftfuktighet.
Ge den en placering med måttligt starkt ljus och intermediära till varma temperaturer. Odla i en öppen, väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattningen i slutet av vintern mars till april för att inducera blomningen men håll luftfuktigheten hög. Blomstjälkarna kommer att sloka om ljuset är otillräckligt.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum barbatum// var. //hennisianum// M.W.Wood (1976)
__Heterotypic Synonyms:__
//Paphiopedilum hennisianum// var. //christiansenii// O.Gruss & Roeth (1996)
//Paphiopedilum hennisianum// f. //christiansenii// O.Gruss & Roeth (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphhennisisnum.htm]] 2015-05-20
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_hennisianum]] 2015-05-20
[[Slipperorchid.info|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/hennisianum/index.html]] 2015-05-20





















!Allmänt och utbredning
Den växer litofytiskt på mycket eroderade kalkstensklippor i Kina och norra Vietnams täta, fuktiga låglandsskogar mellan 400 och 750 meters höjd. //Paph. tranlienianum// är mycket sällsynt med endast några få kända lokaler. Förekomsten av arten har minskat betydligt under de senaste decennierna och vissa populationer är troligen redan utrotad i Vietnam på grund av bränder, skogsskövling och hänsynslös insamling. Det uppskattade antalet vuxna individer är mindre än 50 stycken i små fragmenterade populationer. Den finns i närheten av två orter i provinsen Cao Bang i norra Vietnam, Thai Nguyen och Tuyen Quang, och en ort i sydöstra Yunnan.
Namnet kommer för att hedra den vietnamesiska botanisten fru Tran Ngo Lien som var den första att upptäcka och exportera arten från Vietnam. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Paphiopedilum.

!Utseende
Arten tillhör de småväxta inom släktet och bildar tre till sex långsmala, läderartade klargröna blad, upptill 18 cm långa och två cm breda, med vita kanter och en tydlig köl längs undersidan. Under september till november bildas en klargrön, gulhårig, tio till 18 cm lång blomstängel som bär en ensam, eller mer sällan, två blommor. Blommorna är fem till sex cm stora i klara gröna nyanser med prickar i purpur. Blommorna är till och med lite mindre än hos //[[Paph. spicerianum|e1ed1ff1-531e-40fe-b324-008325228bbf]]//. Den dorsala sepalen är vit med längsgående purpurbruna ränder och böjer sig fram över läppen som en kepsskärm även på en utslagen blomma. Petaler och läpp är ljusgrön överdragen med ljusbrunt och med nerver i purpurbrunt. Petalernas yttre kant är vågig. Staminoiden är ljust gulgrön med en tydlig grön mittpunkt.

!Skötsel
Den växer halvskuggigt i ett område med varma, våta somrar och svala, torra vintrar då bara dimma och enstaka lätta duggregn fuktar plantan. Vintertemperaturen kan nattetid falla till under tolv grader.
Odla arten i en mycket väldränerad mix av medelgrov barkkompost, sphagnum och perlit som ger god luftcirkulation till rötterna. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning behövs en period med minskad vattning under vintern.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum caobangense// N.T.Tich (1999) nom. inval.
//Paphiopedilum tranlienianum// f. //alboviride// O.Gruss (2005)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphtranlienianum.htm]] 2015-08-28
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/tranlienianum/index.html]] 2015-08-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_tranlienianum]] 2015-08-28
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092421]] 2015-08-28












































































































































































































!Allmänt och utbredning
//Acianthera// var tidigare ett undersläkte till //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]// som ganska nyligen fick status som eget släkte tack vare DNA-sekvensering. Det innehåller <$view field="count"/> accepterade arter från Mexiko till tropiska Amerika, av vilka de flesta är flugpollinerade.
Namnet anspelar på de spetsiga horn blommorna bär.

!Utseende
Släktet är enormt variabelt i både storlek och form, från mosslika miniatyrer till meterhöga växter, upprätta eller krypande, tunna eller köttiga blad i en oändlig variation. De har reducerade pseudobulber och istället har en del tjocka, suckulenta blad.
Deras blommor tillhör orkidévärldens mest underligt formade och ofta väldigt små, ibland bara några millimeter stora. En sak de har gemensamt är att de alla har två pollinier.

!Skötsel
Deras odlingsbetingelser varierar i lika stor grad som deras utseende, men arterna är framför allt skuggväxande i varma miljöer. De flesta kräver hög luftfuktighet och god luftcirkulation. Som epifyter vill de inte ha rötterna stående i vatten, utan en daglig dusch för att sedan snabbt torka upp igen, är allt de behöver. En svag dos näring är fullt tillräckligt, halva den rekommenderade dosen eller svagare, varje vecka under tillväxtperioden.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Acia. recurva|ded021ce-01c1-4db6-9e8f-92450d22b698]]// Pridgeon & M.W. Chase (2001)

''Uttal''
ah-see-AN-thur-uh

''Synonymer''
__Heterotypic Synonyms:__
//Cryptophoranthus// Barb.Rodr. (1881)
//Brenesia// Schltr. (1923)
//Geocalpa// Brieger (1975), no Latin descr. or type
//Sarracenella// Luer (1981)
//Aberrantia// Luer (2005)
//Didactylus// Luer (2005)
//Unguella// Luer (2005)
//Arthrosia// Luer (2006)
//Dondodia// Luer (2006)
//Ogygia// Luer(2006)

!Rekommenderad läsning
[[the Pleurothallid Alliance|http://pleurothallids.com/index.php?option=com_content&view=article&id=94:acianthera&catid=39:currently-recognized-genera&Itemid=58]]



















!Allmänt och utbredning
//Paph. stonei// förekommer i mossan och de tunna humuslagren på kalkstensklipporna eller i mossan på träd, mellan 60 och 820 meters höjd över havet. Den är endemisk för ett avlägset och isolerat område av Sarawak, Borneo, Malaysia, där den dessutom är helt fredad.
Kromosomtalet är 2n=26.

!Utseende
Bladen är rent gröna, upptill 70 cm långa och fem cm breda. Blomstängeln är purpurfärgad och också den upptill 70 cm lång med två till fem stycken decimeterstora blommor. I naturen blommar de på andra eller tredje årets tillväxt, framför allt under april till juni och ibland igen på hösten under augusti till januari. Den dorsala sepalen är vit med tre till fem purpurfärgade strimmor. Petalerna är gulaktiga med utdragna rödbruna fläckar mot basen. Läppen är matt rosa med mörkare nervatur och ljus undersida.

!Skötsel
Det är en svår art att tillväxa och få att blomma, den tar många år på sig att utveckla fullväxta skott och många gånger krävs flera skott för att den ska blomma. När den väl blommar är den en spectakulär syn.
Odla den i en väldränerad, fuktighetsbevarande kompost och stör rötterna så lite som möjligt vid omplanteringen.
Den föredrar ljusa och varma odlingsförhållanden utan direkt sol, med en ständigt hög luftfuktighet och god luftcirkulation. Trots att den nästan konstant hålls lätt fuktig genom dimma som kondenserar på plantan, växer den torrare än många andra paphar.
Som varmast kan det bli ner till 18 på nätterna och uppemot 30 grader dagtid. Vintertid är genomsnittstemperaturen tre till fem grader lägre, mellan 15 och 25 grader. Ge den en kort period med svalare och torrare förhållanden under september för att stimulera knoppbildningen. I sitt naturliga habitat på den södra hemisfären, är juli och augusti de torraste månaderna, medan oktober till januari är de blötaste, det vill säga två torra vintermånader och fyra fuktiga sommarmånader.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium stonei// Hooker (1862)
//Cordula stonei// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium platytaenium// Rchb.f. (1880)
//Paphiopedilum stonei// f. //alboflavum// O.Gruss & Koop. (2006)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_stonei]]
[[Paphs|http://paphs.net/media/Paphs/stonei.htm]]
[[AntecLaboratory & LadyslipperFarm|http://www.slipperorchids.info/paphdatasheets/polyantha/stonei/index.html]]
[[PhilsOrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_mastigopetalum.htm#stonei]]
[[GoreORchidConservatory|http://www.goreorchids.com/SpecPgs/Paph-stonei.html]]























































































































!Allmänt och utbredning
//Trichosalpinx// är ett släkte med <$view field="count"/> neotropiska arter från de tropiskt fuktiga skogarna i de södra delarna av Mexiko till södra Brasilien samt den karibiska övärlden.
De delas in i två undersläkten, Trichosalpinx och Tubella.
De är nära släkt med //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//, det som skiljer dem från övriga pleurothallidinae är att //Trichosalpinx// har omslutande, räfflade bladskidor på stammen till blomman. Släktnamnet kan närmast översättas med ´"hårig trumpet" och hänvisar till dessa ringar på stjälken.

!Utseende
De varierar i form och färg men generellt är det små plantor utan pseudobulber. Blommorna mäter bara 5 mm.

!Skötsel
Generellt trivs arterna inom släktet //Trichosalpinx// i halvskugga. De kan odlas i sval till intermediär temperatur. Ge plantan en fin barkkompost med perlite eller vitmossa. Vattna regelbundet och håll odlingsmediumet fuktigt. De kan även monteras.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//Specklinia cilaris// Lindley (1838) = //[[Trchpnx. ciliaris|ddc4d750-d4a8-483d-8a9f-aac74a09c398]]// Luer (1983)

''Uttal''
trick-oh-SAL-pinks

''Synonymer''
__Heterotypic Synonym__
//Pseudolepanthes// Archila (2000)
//Tubella// Archila (2000)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Trichosalpinx]]







!Allmänt och utbredning
Det är en storväxt art från Sarawak, Borneo, där den växer i lövkomposten i sprickorna på kalkstenklippor vid rinnande vatten nära toppen av kullen Bukit Kana, på runt 800 meters höjd. //Paph. platyphyllum// upptäcktes först av Dr. Yoshishige Tachibana den 25 april 1964. 20 plantor av drygt 30 samlades in varav 15 skickades till Fumimasa Sugiyamas plantskola, Yamayo Noen orchids, Japan. Vissa taxonomer tror att det är en artificiell hybrid av //[[Paph. kolopakingii|f72a725d-1ff8-4f0e-b6a8-50c69f7842a8]]// och //[[Paph. stonei|1b9d4495-8551-441d-9fea-555ed12559f7]]//.
Artnamnet anspelar på dess breda blad. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Corypetalum. Kromosomtalet är 2n=26.

!Utseende
Det är en stor art som får fem till sju stycken, ovantill blågröna, undertill ljusgröna, blad i en solfjädersform. Bladen får en tydlig, längsgående köl och kan bli upptill 60 cm långa och drygt nio cm breda. Under vår och försommar kommer en halvmeterlång blomstängel som kan få tre till nio stycken tio cm stora, hållbara blommor som kan stå mer än tre månader. Blommorna har en söt doft av honung. Den dorsala sepalen och läppen liknar de hos //[[Paph. kolopakingii|f72a725d-1ff8-4f0e-b6a8-50c69f7842a8]]// men färgen liknar mer de hos //[[Paph. stonei|1b9d4495-8551-441d-9fea-555ed12559f7]]//, och den har långa, vridna petaler och en stor, utstickande läpp, med kraftiga nerver färgade i ljusbrunt. Hos //Paph. platyphyllum// är blomman dock betydligt större än hos de båda andra arterna.

!Skötsel
Odla denna art i skugga eller halvskugga, mellan 8000 till 13000 lux, i en intermediär eller varm temperatur med en luftfuktighet över 50%. Låt inte temperaturen gå under 16 grader och helst inte alltför mycket över 23 grader.
I naturen blir bladen ljust gröna då de växer i ganska skuggiga områden. Om bladen blir blekt gula får den för mycket ljus. Lite mer ljus under vintern när dagarna är kortare har dock bara positiva effekter.
Använd vatten av bra kvalité och ge jämn vattning under hela året utan att låta den torka upp för mycket mellan vattningarna. Ge svag gödning ofta men skölj igenom kompost med rent vatten regelbundet för att minska risken för uppbyggnad av salter. När blomstängeln kommer fram är det viktigt att hålla komposten jämnt fuktig för att förhindra att stängeln torkar.
Omplanteringen görs bäst under våren eller försommarmånaderna efter blomningen när de nya skotten bryter fram. Det kommer att hjälpa rotinitiering och minskar stressen på plantan. Odla i en vanlig bark mix, och använd inte för stora krukor. Det är bäst att låta plantan växa till ett stor exemplar med sex eller flera skott innan den delas. Håll plantan något torrare efter omplanteringen under de första två veckorna.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum stonei// var. //platyphyllum// J.M.H.Shaw

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphplatyphyllum.htm]] 2015-07-14
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/platyphyllum/index.html]] 2015-07-14





















































































































!Allmänt och utbredning
Släktet //Mycaranthes//, som förkortas //Mrth.// och innehåller <$view field="count"/> accepterade arter bildade tidigare en sektion inom //[[Eria|b5950489-409b-46a6-bc77-5bc12e5c2a4e]]// men har upphöjts till eget släkte. Arterna växer epifytiskt, litofytiskt och ibland till och med terrestriskt i sydöstra Asien, från östra Himalaya i Indien, Nepal, och Bhutan, genom nordöstra Indien till södra Kina, Laos, Vietnam, Thailand, den malasiska övärlden, Philippinerna, Borneo, Java, Sumatra och New Guinea, i träskmarker, lägre bergsskogar och även i klippiga områden från havsnivå till 2400 m höjd. De skiljer sig från //[[Eria|b5950489-409b-46a6-bc77-5bc12e5c2a4e]]// genom sina minimala könspelare, andra habitat och att arterna producerar pseudopollen som lockar bin.
Namnet kommer från ''myc'' som kommer från ''mycos'', "svamp", och ''-are'' som anger en plats, i det här fallet "blomma". Blomman skulle alltså se ut som om den blivit angripen av en svamp, alldeles luden som den är.

!Utseende
De saknar pseudobulber utan har en kort eller utdragen, långsmal stam med få till många noder. Stammarna på en del storväxta arter kan bli uppemot 70 cm långa. Bladen kommer alternerande i två rader längs stammens hela längd. Bladen är vanligen långsmala och basen av bladen omsluter stammen helt. Från toppen av stammen kommer en eller flera blomstänglar. Hos mycket välväxta plantor har rapporterats så många som tolv blomstänglar från en och samma stam. Blomställningen bär otaliga små, ludna blommor som sitter tätt tillsammans i en spiral längs stängeln. Blommorna är vanligen krämfärgade eller gröngula, ibland med små purpurfärgade prickar.

!Skötsel
I naturen är de oftast inte så nogräknade med var de växer, så de kan hittas på små grenar nära trädtaket, på större grenar, i klykor, eller direkt på stammarna. De kan växa på toppen av stora stenar, på nedfallna kvistar och grenar hängande mitt i luften, eller på fallna trädstammar i skogen, så länge de inte är övervuxen av klängväxter eller buskar. En favoritplats är på trädstammar som fallit över en flod, bra ljus, massor av fukt och inte mycket konkurrens.
Odla dem gärna i lerkrukor eftersom de gärna blir topptunga och annars lätt välter. De vill ha en vanlig, medelgrov barkompost och inte för stor kruka, ungefär som för //[[Eria|b5950489-409b-46a6-bc77-5bc12e5c2a4e]]//.
Ge en ljus eller halvskuggig, inte för mörk, växtplats med regelbunden vattning så trivs de i regel utmärkt. Det är plantor som är lätta att odla och svåra att döda.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Podochilaeae
''Undertribus'': Eriinae

''Typart''
//[[Mrth. latifolia|c94ef040-7d72-4fdb-a5e2-392261af75e8]]// Blume (1825)

''Uttal''

!Synonymer
N/A

!Rekommenderad läsning
[[the Orders and Families of Monocots|http://families.e-monocot.org/taxonomy/term/818/descriptions]]







































!Allmänt och utbredning
//Pleione// är ett litet släkte, bestående av <$view field="count"/> arter små lövfällande jordorkidéer. De växer i väldränerade jordar, på klippor, på nedfallna trädstammar, i mossa till jordfyllda fickor på nästan lodräta klippväggar i bergsområdena i Himalaya, Indien, Myanmar, Thailand, Laos, Vietnam och Kina. De växer på altituder från 600 meter upp till 4200 meters höjd.
Namnet kommer från havsnymfen Pleione, moder till Plejaderna i grekisk mytologi. 

!Utseende
Den sympodiala tillväxten hos pleioneorkidéer är mycket ovanlig. Plantan består av en bulb som något liknar en krokusknöl, och i England kallas de för ''Himalayan crocus'' eller ''Indian crocus'', dock utan att likna krokusblommor. Varje pseudobulb växer bara ett år med ett eller två blad fästade vid bulbens topp. Bladen faller av under hösten, och bulben vilar tills ett nytt skott börjar tillväxta på våren.
Från de kraftigaste bulberna växer blomknoppar fram vilka snabbt slår ut till relativt stora, cattleyaliknande blommor. De delikata blommorna håller i tio till 20 dagar, och beroende på vilken sort det är, finns de i rosa, lila, vita, gula och aprikos varianter. Flera arter blommar under hösten med //[[Pln. saxicola|d8cb7fe3-6ba4-4008-9180-f4523b70909c]]// som börjar redan i augusti. Så följer andra, nästan kontinuerligt fram till jul.

!Skötsel
Under våren börjar rötterna växa mer eller mindre samtidigt som blommorna börjar vissna och under denna tid är det viktigt att inte övervattna. Målet är en nätt och jämnt fuktig kompost, så rötterna får leta efter fukten. Om komposten är för blöt, riskerar rötterna att ruttna. En bra minnesregel är __"Inga rötter - inget vatten, lite rötter - lite vatten, mycket rötter - mycket vatten"__
När plantan har välutvecklade rötter (något som märks på en snabb bladtillväxt), kan vattningen efter hand ökas. //Pleione// kommer från områden med sommarmonsuner, och så länge komposten är genomsläpplig och plantan växer aktivt, är det svårt att vattna för mycket. Mjukt vatten är bäst. Ett annat trick är att plantan sätts i en oglaserad lerkruka, lerkrukan sätts i en ytterkruka fylld med torvmull. Torvmullen vattnas då och då, beroende på väder och plantans tillväxt. Ibland kan man behöva vattna i lerkrukan också. På så sätt hålls plantan lagom fuktig hela tiden.
På sommaren placeras växterna i ett inte allt för varmt läge med god ventilation, hög luftfuktighet och halvskugga. Skuggningen är viktig, då bladen är ömtåliga och lätt bränns. Utomhus kan de tolerera full sol, men en skuggig plats är att föredra. Temperaturen bör, om möjligt, inte överstiga 25 grader.
Sist på sommaren mognar de nya bulberna och på hösten börjar bladen att gulna och vissna. Man drar då ner på vattningen, och slutar helt att göda plantorna.
//Pleione// kräver dessutom en viloperiod med två till sex grader under december till mars (eller ungefär en månad efter att bladen fallit till dess att de nya skotten visar sig). De förvaras hela vintern på ett torrt och kyligt ställe, till exempel i garaget eller i kylskåpets grönsakslåda. Då de är helt vilande, behöver de inte något ljus under denna tid.
//Pleione// kräver ordentligt med näring för att bygga upp sina pseudobulber, för att kunna blomma nästföljande år. De föredrar en svag dos ofta - ''"weakly weekly"''. En lagom dos kan vara en gång i veckan med en tredjedel till en fjärdedel av den normala rekommenderade koncentrationen. Gödslingen bör starta så fort bladen börjat utvecklas i april fram till oktober. En fullvuxen pseudobulb som får tillräckligt med näring kan producera två eller flera pseudobulber varje år. Den gamla skrumpnar och dör på hösten. De flesta arter producerar också en liten bulbil ovanför pseudobulben, som kan fås att blomma efter två eller tre säsonger.
I januari eller februari månad kan man se att "knopparna", de nya skotten på bulberna, börjar röra på sig. Då är det tid att plantera, gärna många i samma kruka. De placeras med hälften av bulberna under kompostytan. Innan planteringen klipps förra årets döda rötter bort så när som ett par centimeter. På samma sätt tar man bort de döda bladdelarna runt bulberna.
I naturen växer pleionerötter inte så mycket på djupet, utan de breder ut sig i sidled. Vid plantering i flata skålar behövs ingen dränering, men om man använder vanliga krukor är det klokt att fylla cirka en tredjedel av krukans höjd med krukskärvor eller lecakulor. Till //Pleione// kan man använda ren, levande vitmossa. Det är så många av dem växer i naturen. Man kan även blanda en kompost av små barkbitar, träkol och lite torv eller grov vitmossa och eventuellt lite halvt nedbruten bladkompost från en bokskog, om man har tillgång till. Andra odlare rekommenderar en blandning av tre delar orkidékompost, tre delar mossa och en del perlite för de flesta arter. En annan blandning bestående av 10 delar medelgrov bark och en del mossa passar många hybrider, eller en del mossa och en del perlite. Generellt ställer inte //Pleione// så stora krav på kompostens sammansättning, bara den är tillräckligt luftig och bidrar till att höja luftfuktigheten. Alla komposterna bör kompletteras med benmjöl, i mängd efter benmjölsförpackningens rekommendationer.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Coelogyneae
''Undertribus'': Coelogyninae

''Typart''
//[[Pln. humilis|019a0428-b34a-4a3f-befa-42dbbf4130f2]]// & //[[Pln. praecox|7e9f11d6-2e9a-4137-a589-e44254121a66]]// D.Don (1825)

''Uttal''
plye-OH-ee

''Synonymer''
__Heterotypic Synonyms:__
//Gomphostylis// Lindley (1830)

!Rekommenderad läsning
[[The Pleione website|http://www.pleione.info]]
[[eFloras|http://flora.huh.harvard.edu/china/novon/zhu1-8-4.html]]
[[Odla.nu|http://www.odla.nu/artiklar/orkide_4.shtml]]
[[Christer och Kristina|http://hem.passagen.se/cefaolni/artikel2.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Pleione_(biology)]]
[[Easy Orchids|http://www.easyorchids.co.uk/site/content/view/23/46/]]
[[Crustacare|http://www.crustacare.be/Plants/Pricelist/Pleionecultivation.htm]]
[[Biology Daily|http://www.biologydaily.com/biology/Pleione_(orchid)]]


























!Allmänt och utbredning
Man finner släktets <$view field="count"/> arter i allt från låglandsskogar till högt belägna bergstrakter från Indien och sydöstra Asien till Indonesien och Fijiöarna, växandes på träd och klippor. Och de är faktiskt nära släkt med //[[Pleione|1e3d43d5-efd2-44ea-ad0b-df6d8cf5951e]]//!
//Coelogyne// kommer från de grekiska orden ''koilos'' som står för "ihålig", och ''gyne'' som betyder "kvinnlig". Det syftar på den främre ihåliga könspelaren som detta släkte har.

!Utseende
Plantorna består av bulber på ett rhizom med litet till stort avstånd från varandra. Varje bulb bär ett eller två elliptiska blad, och blomstängeln bryter fram från bulbens nederkant eller i det nya skottet. Blommorna blir vita, krämfärgade, brunaktiga och/eller gröngula, och bryter vanligen fram under våren. Läpparna har vanligtvis fyra kölar.

!Skötsel
Inom släktet finns både arter som föredrar tempererade växtförhållanden (//[[Coel. mayeriana|58a5eb82-74f9-4587-b5f9-ed13d3617b63]]//, //[[Coel. tomentosa|8cd08fbc-eed9-4613-8d25-1affa5928f24]]// etc.) och kallväxande dito (//[[Coel. cristata|5b87f6d8-ad59-4ff6-9544-80ef79a6f7d6]]//, //[[Coel. flaccida|caad6542-10c0-4483-aaf5-9354fef2040f]]//, //[[Coel. fimbriata|10ac43e7-0cb2-4048-9c05-161833eb4ef6]]// etc.).
På grund av deras skiftande levnadsvillkor är det svårt att ge några generella skötselanvisningar. De förstnämnda vill ha jämn värme och vattning över året, eventuellt med en viss neddragning av vattningen när bulberna mognat. De övriga vill ha en ljus, kall och torr vila under vintern (då de nya bulberna mognat) och under tillväxtperioden mycket vatten och gärna näring.
Plantera de arter som har bulberna tätt ihop i kruka eller montera på kork eller bark. Som kompost i kruka eller korg kan man använda lika delar sphagnum och torv, med en liten tillsats sand. Använd, kasserad, phalanopsiskompost är också utmärkt. Omplanteringen bör ske under våren, efter det att blomningen är över, vanligtvis under februari.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Coelogyneae
''Undertribus'': Coelogyninae

''Typart''
Lindley använde flera olika arter vid skapandet av släktet

''Uttal''
see-LOJ-in-ee

''Synonymer''
__Heterotypic Synonyms:__
//Hologyne// Pfitzer (1907)
//Ptychogyne// Pfitzer (1907)

!Rekommenderad läsning
[[EasyOrchid|http://www.easyorchids.co.uk/site/content/view/16/39/]]
[[OrchidSpeciesCulture|http://www.orchidculture.com/COD/FREE/Coel_Art.html]]














!Allmänt och utbredning
Arten kommer från sydvästra Kina, Thailand och Vietnam där den växer terrestriskt i skuggiga låglandsskogar mellan 500 och 750 meters höjd över havet.
Plantan liknar //[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]// men med en helt annan blomma, som påminner mer om den hos //[[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]]//. Den är fortfarande ovanlig i odling.

!Utseende
Det är en medelstor art som bildar en rosett med fyra till sex långsmala blad, över 40 cm långa och med en helt grön ovansida och en undersida som är intensivt purpurfärgad mot basen. Under hösten kommer en 16 till 20 cm lång, grön, blomstängel som bär en ensam blomma. Blomman blir drygt sju cm stor, grön eller gulgrön med många bruna längsgående ränder på petalerna.

!Skötsel
Ge den en skuggig och varm växtplats. Odla den i en väldränerad mix av medelgrov barkkompost, perlite och sphagnum. Vattna var fjärde till var femte dag.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum barbigerum// var. //lockianum// Aver. (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphvejvarutianum.htm]] 2015-09-02
[[OrchidKarma|http://orchidkarma.com/paphiopedilum-vejvarutianum/]] 2015-09-02






























































































!Allmänt och utbredning
Det är en epifytisk miniatyrart som växer på västra Himalayas sluttningar, i kinesiska Himalaya, Nepal, Thailand, Myanamar och Vietnam mellan 950 och 1600 meters höjd.
Undersökningar har visat att //Phr. matthewsii// är en så kallad CAM-växt, [[crassulacean acid metabolism|http://sv.wikipedia.org/wiki/CAM_fotosyntes]], det vill säga den har ett metaboliskt och fysiologiskt system som gör det möjligt att utföra fotosyntes om dagen men ta upp koldioxid om natten. En värmeanpassning för att minska vattenavdustningen.

!Utseende
Bladen är köttigt saftiga, penlikt runda och lätt böjda. De mörkgröna bladen bildar en liten solfjäder som blir mellan åtta och 15 cm lång. Blomstängeln kommer under sommaren eller hösten och bär en tät blomställning med mellan 20 och 100 stycken två till tre millimeter stora doftlösa blommor. Blommorna är ljust gulbruna som med ålder blir gulorange.

!Skötsel
Den vill ha en varm växtplats med hög luftfuktighet och konstant fukt. Bladen blir skrynkliga om luftfuktigheten är för låg.
Den kan odlas monterad eller i kruka med en poröst kompostmix med mycket sphagnum.

!Synonymer
__Homotypic Synonyms:__
//Pinalia malthewsii// Kuntze (1891)
//Eria matthewsii// Drake (1892)
__Heterotypic Synonyms:__
//Epidendrum myosurus// G.Forst. (1786)
//Dendrobium myosurus// Swartz (1799)
//Oberonia myosurus// Lindley (1830)
//Eria myosurus// Rchb.f. (1868), nom. illeg.
//Malaxis myosurus// E.C.Parish & Rchb.f. (1874)
//Iridorkis myosurus// Kuntze (1891)
//Phreatia inversa// Schlechter (1905)
//Phreatia neocaledonica// Schlechter (1906)
//Phreatia upoluensis// Schlechter (1907)
//Phreatia myosurus// Ames (1908), nom. illeg.
//Phreatia reineckei// Schlechter (1911)
//Phreatia yunckeri// L.O.Williams (1943)
//Octarrhena myosurus// P.F.Hunt (1970)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/obemysorus.htm]]




!Allmänt och utbredning
//Galeola// är ett litet terrestriskt släkte med <$view field="count"/> arter från Indokina, Malaysia, Indonesien och Filippinerna, från havsnivå till 1700 meters höjd, vanligtvis i öppna områden nära större ansamlingar död ved eftersom de lever i symbios med nedbrytande mykorrhizasvampar.
Namnet kommer från det grekiska ''galeole'', som betyder "liten hjälm" och beskriver den hjälmformade änden av könspelaren. Släktet har de största fröna inom orkidévärlden. Kromosomtalet är 2n=28, 30.

!Utseende
De saknar klorofyll och bladen har reducerats till små rödaktiga, trekantiga fjäll. Under jorden har de ett omfattande rhizom- och rotsystem och ovan jorden bildar de långa, grenade, gulbruna eller rödaktiga stammar som kan bli mer än 50 m långa. Stammen är upprätt eller krypande, med en rot från varje nod som hjälp att klättra. I toppen av stammen kommer Blomstängeln och utsidan av blommorna är ludna med tunt, rödbrunt hår. Blomställningen producerar många små köttiga, röda eller gulaktiga blommor som troligen pollineras av små bin. Frökapseln är lång och smal med otaliga, vingförsedda frön.

!Skötsel
Eftersom de är mykoheterotrofer är de mycket svåra att få att överleva i odling.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Gla. nudifolia|9eb4ecec-73bc-4130-a1af-d8bb229ecda6]]// Lour. (1790)

----
''Uttal''
gah-lee-oh-lah

----
''Synonymer''
__Heterotypic Synonyms:__
//Pogochilus// Falc. (1841)

!Rekommenderad läsning
[[African Orchids|http://www.africanorchids.dk/vanilloideae/subtribe-galeolinae/galeola]] 2015-12-30






























!Allmänt och utbredning
Det är en grönbladig art som nyligen upptäckts växa i de sydöstra provinserna Yunnan och Guangxi i Kina och den angränsande norra delen av Vietnam mellan 610 och 1400 meters höjd.
Den är uppkallad efter orkidéinsamlaren Henry Azadehdel, som under 1900-talets senare del försåg botaniska trädgårdar i hela Europa med plantor.

!Utseende
Det är en liten kompaktväxande och ovanlig art som växer som litofyt i öppna barr-, bland- och lövfällande skogar på kalkklippor.
Den får tre till sex skarpt kölade, lancettlika blad, som är klart mörkgröna på ovansidan och ljusare gröna undertill.
Blomman som blir proportionellt stor med sina mellan fyra och sex cm, kommer på en drygt dm hög blomstängel under höst eller tidig vinter. Den är kraftigt färgad med många randiga och prickiga markeringar. Läppen brukar beskrivas som tuggummirosa med en grönaktig ton dorsalt och täckt med prickar.
Den är ovanlig så till vida att hela läppen är färgad i rosa, hos de flesta paphar är bara framsidan på läppen i den karaktäristiska färgen.

!Skötsel
//Paph. henryanum// är lättodlad och accepterar mer ljus än många andra ensamblommande arter inom släktet.
Den föredrar en vanlig, lätt paphkompost i en väldränerad kruka. Ge den god luftcirkulation och håll den fuktig utan att vara blöt.
Tre till fem skott får plats i en sju centimeters kruka, så det är en bra växt för den som inte har så mycket utrymme.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum dollii// Lückel (1987)
//Paphiopedilum henryanum// var. //christae// Braem (1991)
//Paphiopedilum chaoi// H.S.Hua (1999)
//Paphiopedilum henryanum// f. //christae// O.Gruss & Roeth (1999)
//Paphiopedilum henryanum// f. //album// O.Gruss (2002)
//Paphiopedilum tigrinum// f. //huberae// Koop. (2002)
//Paphiopedilum henryanum// f. //chaoi// O.Gruss & M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphhenryanum.htm]]
[[BurleighPark Orchids|http://www.speciesorchids.com/Paphiopedilum_henryanum.html]]
[[Paphs|http://paphs.net/media/Paphs/henryanum.htm]] (bilder)







































































































!Allmänt och utbredning
//Paph. liemianum// [paf-ee-oh-PED-ih-lum ly-em-ee-AH-num] är en art som endast påträffats på de nedre sluttningarna av vulkanen Gunung Sinabung på norra delen av Sumatra mellan 600 och 1000 meters höjd över havet där den växer litofytiskt på nästan vertikala kalkstensklippor nära vattenfall, eller ibland terrestriskt bland rötterna av skuggande träd.
Den är uppkallad efter den kinesiske samlaren Liem Khe Wie som skickade de första exemplaren till Fowlie som skrev den första beskrivningen av arten 1971. Taxonomiskt tillhör den undersläktet Cochlopetalum. Kromosomtalet är 2n=32.

!Utseende
Den bildar grupper med många plantor tätt tillsammans. De fyra till sju bladen är helt mörkgröna eller marmorerad i ljus- och mörkgrönt på ovansidan och med en undersida som skiftar i rött och purpur. Bladen kan bli mer än 20 cm långa och tre till fem cm breda. Under senvintern och våren kommer en blomstängel som kan bära så många som 20 blommor efter varandra under många månader. Stängeln förlängs ungefär tre cm mellan varje blomma så den kan tillslut bli mer än halvmetern lång. Varje blomma blir upptill åtta cm stor och kan hålla i tre veckor. Den dorsala sepalen är ljusgrön med en vit rand längs med den behårade kanten. De vågiga petalerna är ljusgula med en rosa kant och rödbruna prickar och mönster. Läppen är rosa med mörkare fläckar.

!Skötsel
Området där den växer utsätts för kraftiga regn under vintern och tidig vår och endast måttliga mängder regn under hösten och sommaren. Våren är den varmaste säsongen med temperaturer upptill 30 grader under dagen och ner till 20 grader nattetid. Ge den en ljus skugga upptill 25000 lux och intermediära eller varma temperaturer. För en framgångsrik odling av //Paph. liemianum// behövs hög luftfuktighet och en nattemperaturen som är sex grader lägre än under dagen. Odla i en väldränerad mix med barkkompost och perlit. Den bästa tiden för omplantering är omedelbart efter blomningen.  Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattningen och sänk nattemperaturen ner till 18 grader under hösten för att inducera blomningen.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum chamberlainianum// subsp. //liemianum// Fowlie (1971)
//Paphiopedilum victoria-regina// subsp. //liemianum// M.W.Wood (1976)
//Paphiopedilum chamberlainianum// var. //liemianum// Braem (1988)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphiemianum.htm]] 2015-05-26
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/cochlopetalum/liemianum/index.html]] 2015-05-26
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_liemianum]] 2015-05-26


















!Allmänt och utbredning
Denna miniatyrart återfinns endast i bergsregnskogar i delstaten Bahia, längs Atlantens kust i Brasiliens östra del, mellan 500 och 1000 meters höjd.
Eftersom den är så nyligen upptäckt och beskriven är den fortfarande relativt ovanlig i odling.
Namnet har den fått för att hedra den brasilianska orkidéntusiast Da Silva.

!Utseende
Den får små ovala pseudobulber, tillplattade från sidorna och under tillväxten omslutna av två eller tre täckblad som senare faller av. Från toppen av bulben kommer två tunna avlånga blad. Den blommar under våren med en enda blomma på den fem till åtta cm korta blomstängeln. Hela blomman är bara fyra cm stor och klart gyllengul.

!Skötsel
Den växer i intermediära och varma habitat med ljus halvskugga. Håll den fuktig men inte blöt, låt inte komposten torka ut. Vattna en eller två gånger i veckan. Den får väldigt tunna rötter som inte klarar en för blöt eller för torr kompost. Den bör därför planteras i en liten kruka med lucker kompostmix av fin bark och perlite eller trädormbunke. Äldre plantor kan få en månad utan vatten under vintern.

!Synonymer
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Promenaea_silvana]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/promsilvana.htm]]




!Allmänt och utbredning
Släktet växer över stora områden från Indien, Sydostasien, Kina, Japan, Malaysia, Filippinerna, Nya Guinea, Australien, Nya Zeeland och öarna i Stilla Havet.
Det är ett av de största släktena inom orkidéfamiljen med, i skrivande stund, januari 2015, <$view field="count"/> arter. Faktiskt det näst största efter //[[Bulbophyllum|e98d2bd9-4878-4182-acc8-d67b9b46cc1f]]//. Men släktet är i konstant omstrukturering då det råder stor förvirring om hur många arter släktet innehåller. Många av samma art har blivit beskrivna flera gånger av olika botaniker och fått olika namn. De arter som växer över stora områden kan variera i utseende och storlek och har därför fått olika namn.
Namnet kommer från grekiskans ''dendros'' som betyder "träd" och ''bios'' som betyder "liv". Det berättar något om hur de växer i naturen. Några undantag finns det som växer på stenar, klippor och även på marken.

!Utseende
Växterna karaktäriseras av långsmala bulbstammar med flera småblad fördelade utmed stammen eller samlade i dess topp. Många fäller bladen efter växtperioden. Blommorna kommer också spridda ut med stammen eller på en stjälk från stamtoppen.

!Skötsel
Eftersom det är ett så stort och vittspritt släkte är det inte lätt att ge några generella råd. De som dyker upp i den vanliga blomsteraffären är oftast varmväxande och trivs bra på fönsterbänken. Alla arter vill ha god luftcirkulation runt plantorna. De vill stå mycket ljust, på vintern till och med i full sol.
För att lyckas bäst med dessa så ställ ut dem på sommaren för att de ska få en temperaturväxling mellan dag och natt. Om de står för varmt får de ofta små skott, ''keikis'', på bulberna.
De föredrar att vattnas rikligt under tillväxtperioden. Hög luftfuktighet uppskattas också. De flesta arterna blommar under vintern eller våren.
De mer storväxta arterna med raka bulber passar bäst för krukodling, samtidigt som de med hängande bulber eller riktigt småväxta arterna passar bäst monterade på korkek eller i en liten korg. Omplantering bör inte ske för ofta eftersom de blommar bättre om de är ordentligt etablerade. Se till att odlingskärlet är litet och väldränerat.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Dendrobieae
''Undertribus'': Dendrobiinae

''Typart''
//[[Den. moniliforme|555943f2-a334-410d-acf8-569a0ec71c5b]]// Swartz (1799)

''Uttal''
den-DROH-bee-um

''Synonymer''
__Heterotypic Synonyms:__
//Callista// Loureiro (1790)
//Ceraia// Loureiro (1790)
//Aporum// Blume (1825)
//Desmotrichum// Blume (1825) nom. illeg.
//Grastidium// Blume (1825)
//Macrostomium// Blume (1825)
//Onychium// Blume (1825)
//Pedilonum// Blume (1825)
//Schismoceras// C. Presl (1827)
//Cadetia// Gaudich. (1829)
//Orthoglottis// Breda (1830)
//Thelychiton// Endlicher (1833)
//Keranthus// Lour (1836)
//Endeisa// Rafinesque (1837)
//Tropilis// Rafinesque (1837)
//Ditulima// Rafinesque (1838)
//Froscula// Rafinesque (1838)
//Ormostema// Rafinesque (1838)
//Pierardia// Raf. (1838) nom. illeg.
//Thicuania// Rafinesque (1838)
//Latourea// Blume (1849)
//Aclinia// Griffith (1851)
//Dichopus// Blume (1856)
//Stachyobium// Rchb.f. (1869)
//Coelandria// Fitzgerald (1882)
//Sayeria// Kraenzlin (1894)
//Diplocaulobium// Kraenzl. (1910)
//Goldschmidtia// Dammer (1910)
//Inobulbum// Schlechter & Kraenzlin (1910)
//Epigeneium// Gagnep. (1932)
//Katherinea// A.D.Hawkes (1956)
//Ephemerantha// P.F.Hunt & Summerh. (1961)
//Flickingeria// A.D.Hawkes (1961)
//Amblyanthus// Brieger (1981)
//Australorchis// Brieger (1981)
//Bolbodium// Brieger (1981)
//Conostalix// Brieger (1981)
//Dendrocoryne// Brieger (1981)
//Dockrillia// Brieger (1981)
//Dolichocentrum// Brieger (1981)
//Eriopexis// Brieger (1981)
//Euphlebium// Brieger (1981)
//Herpetophytum// Brieger (1981)
//Kinetochilus// Brieger (1981)
//Latourorchis// Brieger (1981)
//Microphytanthe// Brieger (1981)
//Monanthos// Brieger (1981)
//Trachyrhizum// Brieger (1981)
//Amblyanthe// Rauschert (1983)
//Cannaeorchis// Clem. & Jones (1998)
//Winika// Clem. (1997)
//Tetrodon// Clem. & D.L.Jones (1998)
//Abaxianthus// M.A.Clem. & D.L.Jones (2002)
//Aporopsis// Clem. & Jones (2002)
//Bouletia// Clem. & Jones (2002)
//Cepobaculum// Clem. & Jones (2002)
//Ceratobium// Clem. & Jones (2002)
//Chromatotriccum// Clem. & Jones (2002)
//Davejonesia// Clem. (2002)
//Dendrobates// Clem. & Jones (2002)
//Distichorchis// Clem. & Jones (2002)
//Dockrilobium// Shaw (2002)
//Durabaculum// Clem. & Jones (2002)
//Eleutheroglossum// Clem. & Jones (2002)
//Eurycaulis// Clem. & Jones (2002)
//Exochanthus// Clem. & Jones (2002)
//Ichthyostomum// Jones, Clem. & Molloy (2002)
//Leioanthum// Clem. & Jones (2002)
//Maccraithea// Clem. & Jones (2002)
//Oxyglossellum// Clem. & Jones (2002)
//Sarcocadetia// M.A.Clem. & D.L.Jones (2002)
//Stelbophyllum// D.L.Jones & M.A.Clem. (2002) orth. var.
//Stilbophyllum// D.L.Jones & M.A.Clem. (2002)
//Tetrabaculum// Clem. & D.L.Jones (2002)
//Vappaculum// Clem. & Jones (2002)
//Vappodes// Clem. & Jones (2002)
//Anisopetala// Clem. (2003)

!Rekommenderad läsning
[[North Hampshire Orchid Society|http://www.madwesties.demon.co.uk/culture/den.html]]
[[EasyOrchids|http://www.easyorchids.co.uk/site/content/view/18/41/]]
































''Etymology:'' 
From the Greek aspis, shield, and gyne, woman, in allusion to the large rostellum with recurved sides that resembles a shield.











!Allmänt och utbredning
//Stan. tigrina// är en av de mer spektakulära av Nya Världens arter. Det är en mexikansk epifyt, som växer svalt till varmt på lägre än 1100 meters höjd.

!Utseende
Pseudobulberna är ovala, något hopptryckta, mörkt gröna med ett ensamt, elliptiskt blad. Blomstängeln kommer från botten av bulben och växer rakt ner, genom komposten! Den får stora, ljust orangegula blommor med kraftiga rödbruna fläckar. Blommorna håller bara några dagar, men en stor planta kan få många blommor successivt efter varandra. Blommorna är starkt doftande och kommer vanligen under hösten.

!Skötsel
Den föredrar svala förhållanden, diffust ljus och stora mängder vatten under tillväxten. Vattningen är speciellt viktigt för att producera kraftiga bulber och friska blommor. Vattna dagligen i mer öppna korgar. Torra rötter leder till bruna bladspetsar. Under senvintern och tidig vår när bulberna mognar vill de ha en lite torrare period, ungefär hälften av vattenmängden mot under tillväxten.
De föredrar svag gödning varannan vecka och gärna lite kalk i komposten under sommaren. Eftersom blomstängeln kommer ut på undersidan av plantan och växer rakt ner, behöver de odlas hängande. Det enklaste är att odla dem i en korg eller monterade.

!Synonymer
__Heterotypic Synonyms:__
//Stanhopea tigrina// var. //speciosa// Jenish (1855)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/stantigrina.htm]]
[[AbundaFlora|http://www.abundaflora.com/stanhopea_tigrina.htm]]





























































































































!Allmänt och utbredning
Arten påträffas epifytiskt i tropiska dalgångar i de indiska delstaterna Assam och Sikkim samt den östra delen av Himalaya ner till Gangesdeltat i Bangladesh, runt 300 meters höjd. Den kan lätt misstas för [[Bulb. auratum|ab6b9ebf-a662-4867-930b-88fc92d2a189]] som dock endast växer i den thailändska övärlden, Malaysia och på Sumatra och Borneo samt har större pseudobulber, blad och blommor men med en blomstängel som är kortare än bladen och med en klockformad blomställning.
Arten är uppkallad efter föreståndaren för Calcuttas botaniska trädgård under tidigt 1800-tal, [[William Roxburgh|http://en.wikipedia.org/wiki/William_Roxburgh]].

!Utseende
Det är en medelstor medlem av släktet, vars ovalt avlånga pseudobulber kommer med en och en halv till tre cm mellanrum på jordstammen. Bulbernas bas är omgiven av tunna täckblad och varje bulb bär ett ensamt blad, tre till sex cm långt och drygt en cm brett. Under våren och sommaren höjer sig en upprätt, drygt två decimeter lång blomstängel över bladen. I toppen bär den en plan, öppen ring av fem till tolv stycken två cm långa blommor. Den dorsala sepalen är grönaktig med ett fåtal rödbruna markeringar. De laterala sepalerna är bruna med röda prickar och tunna ränder mot basen. Petalerna är bruna med tre breda rödbruna ränder och purpurfärgade hår längs kanterna. Läppen är slät, utan kanaler eller fåror i ytan, färgade i samma bruna nyanser som de laterala sepalerna eller något mörkare.

!Skötsel
De odlas bäst i varm halvskugga med god luftcirkulation, i korgar eller grunda krukor. Som de flesta arterna inom släktet föredrar de en kompostmix av riven sphagnum och perlite som kan hålla en jämn fuktighet utan att bli för blöt. Speciellt när den nya tillväxten kommer behöver den mycket vatten och gödning för att bilda en ordentlig planta.

!Synonymer
__Homotypic Synonyms:__
//Cirrhopetalum roxburghii// Lindley (1830)
//Aerides radiata// Roxb. (1832)
//Phyllorkis roxburghii// Kuntze (1891)
__Heterotypic Synonyms:__
//Cirrhopetalum sikkimense// King & Pantl. (1898)
//Bulbophyllum sikkimense// J.J.Sm. (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbroxburg.htm]]































!Allmänt och utbredning
Det är en liten varmväxande terrestrisk art som återfinns i skrevor på nordliga och östliga kalkstensklippor på ön Krabi och närliggande öar i Thailands arkipelag från havsnivå till 50 meter över havet.
Namnet kommer från latinets ''exsilium'' som betyder "exil" efter sin geografiska separation från //[[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]]//, som den först beskrevs som en variant av. //Paph. exul// är närmast släkt med //[[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]]// och //[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]// från vilka den skiljer sig i att ha halvt upprättstående, smalare blad, en kortare blomstängel och en mindre blomma med synsepalen lika stor som den dorsala sepalen och sträcker sig förbi spetsen på läppen. Den dorsala sepalen är gul med en vit kant och med stora mörka prickar. Taxonomiskt till hör den undersläktet Paphiopedilum sektionen Paphiopedilum. Kromosomtalet är 2n=30.

!Utseende
Den får fyra eller fem långsmala, ljusgröna eller gulgröna blad som blir 15 till 35 cm långa och två eller tre cm breda. Längs hela bladets längd löper en köl. Under senvåren kan plantan bilda en upptill 18 cm lång blomstängel som bär en ensam blomma. Blomman blir sju till åtta cm stor, den dorsala sepalen är vit med nerver i grönt och med stora, svarta prickar i mitten. Läppen är klargul.

!Skötsel
Den behöver mycket ljus, mer än någon annan art inom släktet, och kan klara full sol med tillvänjning och om luftcirkulationen är tillräcklig. December till mars är de torraste och svalaste månaderna med bara dis och dimma som vattnar plantan, resten av året får de återkommande regn.
Odla i en väldränerad kompostmix med medelgrov bark och perlit. Vattna regelbundet ungefär var fjärde till femte dag, mer om det är varmt. Minska vattningen under två månader på vintern för att inducera blomning, om komposten är för blöt när temperaturen sjunker ökar risken för kronröta. Tillväxten kan stimuleras genom att ge plantan en varm placering sommartid. Om den lämnas i fred kan den snabbt utvecklas till en praktfull planta med många skott.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium insigne// var. //exul// Ridl. (1891)
//Cypripedium exul// Rolfe (1892)
//Cordula exul// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium exul// var. //aureum// Rolfe (1896)
//Paphiopedilum exul// var. //aureum// Pfitzer (1903)
//Paphiopedilum exul// f. //aureum// O.Gruss & Roellke (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphexul.htm]] 2015-05-02
[[Slipperorchid.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/exul/index.html]] 2015-05-02
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_exul]] 2015-05-02
[[The Gore Orchid Conservatory|http://goreorchids.com/SpecPgs/Paph-exul.html]] 2015-05-02

;Phillip Cribb, Sarah Robbins, 1993
:Papiopedilum exul, Curtis's Botanical Magazine, Volume 10, Issue 1, pages 5–8, February 1993
:DOI: 10.1111/j.1467-8748.1993.tb00003.x































!Allmänt och utbredning
Släktet består av <$view field="count"/> små eller mediumstora epifytiskt, eller mer sällan litofytiskt och terrestriskt, växande plantor. Vanligtvis växer de under orkidébärande träd i Central- och Sydamerika.
Namnet, som förkortas //Trpla.//, kommer från de grekiska orden ''tricho'', "hår", och ''pilos'' som betyder "filt". Det anspelar på de fina håren på toppen av könspelaren.

!Utseende
Släktet karaktäriseras av korta rhizosom som ger upphov till en rundad eller cylindrisk pseudobulb med ett enda läderartat blad från toppen.
Från basen av bulben kommer korta, hängande blomställningar med en eller ett fåtal blommor. Blommorna har en angenäm doft med fria sepaler och petaler som kan vara vridna eller vågiga.
Den laterala sepalen är vanligen förenad, men endast vid basen. Läppen är treflikad och fäst vid könspelaren, men bara längs centrum. De laterala flikarna som är rundande kan därför stöda varandra för att bilda ett rör som döljer könspelaren. Mellanfliken är bred och bildar tillsammans med de andra flikarna en trumpet. Könspelaren har två pollenklubbor förenade till ett hjärtformat märke.

!Skötsel
Växten kräver en skuggig placering, svalt till varmt. De kan med fördel planteras högst upp på en liten upphöjning, för att visa upp de korta blomställningarna som kommer från basen av plantan.
Ge den ordentligt med vatten under tillväxten, följd av en två till tre veckors viloperiod.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//[[Trpla. tortilis|ec1fa1c1-ecd3-4b7a-b96f-d757abd6ae99]]// Lindley (1836)

''Uttal''
trick-o-PIL-ee-ah

''Synonymer''
__Heterotypic Synonyms:__
//Pilumna// Lindley (1844)
//Helcia// Lindl. (1845)
//Leucohyle// Klotzsch (1854) 
//Neoescobaria// Garay (1972)

!Rekommenderad läsning
[[Woodstream Orchids|http://www.woodstreamorchids.com/trichopilia.html]]
[[Orchids Australia|http://www.orchidsaustralia.com/Trichopilia.htm]]



























































!Allmänt och utbredning
Det är troligen den minsta arten inom släktet och återfinns endemisk för provinsen Cao Bằng i Vietnam där den växer litofytiskt på kalkstensklippor i öppna mossiga skogar mellan 100 och 900 meters höjd.
Den är uppkallad efter fru Helen Averyanova, hustru till Leonid Averyanov, ledaren av den expedition som upptäckte arten. Den är närbesläktad med //[[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]]//. Taxonomiskt tillhör den undersläktet Paphiopedilum sektion Paphiopedilum.

!Utseende
Det är en liten kompakt art som bildar klumpar med flera skott tätt tillsammans. Den får tre till fem köttiga helgröna blad som blir tre till tolv cm långa och mindre än två cm breda. Bladens ovansidor har vita eller gula kanter och på undersidan mot basen förekommer fåtaliga purpurfärgade prickar. Under hösten kommer en kort, mellan fyra och sju cm lång, svarthårig, blomstängel som bär en ensam blomma. Blommorna blir tre till sex cm stora. Den dorsala sepalen är gulaktig eller gyllengul med vit kant, synsepalen gulaktigt vit och petalerna ljust gulgröna eller ljust gulbruna med markeringar i ljust purpur. Läppen ljust gulgrön med markeringar i purpur och en ljust gulgrön staminod med en mycket tydlig, centralt placerad, grön knöl.

!Skötsel
I dess naturliga utbredningsområde utsätts den för torka med bara kraftiga dimmor från oktober till mars med extremt hög fuktighet under sommaren mellan maj till augusti.
Den bör odlas i ljus skugga och intermediära temperaturer. Odla i en väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag, oftare under varma sommardagar. Minska vattningen och sänk temperaturen under vintern för att inducera blomningen, för mycket vatten kommer att leda till röta.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum helenae// f. //aureum// O.Gruss & Roeth (1999)
//Paphiopedilum delicatum// Z.J.Liu & J.Y.Zhang (2001)
//Paphiopedilum helenae// var. //peschutteri// Roeth (2010)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphhellenae.htm]] 2015-05-17
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/helenae/index.html]] 2015-05-17
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_helenae]] 2015-05-17
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092422]] 2015-05-17


























!Allmänt och utbredning
//Paph. tigrunum// är en av de senaste upptäckta kinesiska arterna. Den förekommer allra längst västerut i Yunnan provinsen i Kina, i de täta skogarna på vulkaniska berg i bergskedjan Gaoligong som löper i nordsydlig riktning längs den västra stranden av floden Salween vid gränsen till Myanmar, tidigare Burma.
Där växer den terrestriskt på lätt skuggiga bergssidor mot norr, eller som epifyt på trädarten //Castnopsis indica//, mellan 1400 och 1980 meter över havsnivå. Över 1800 meters höjd börjar magnolia och rhohodendron dominera träd- och buskskiktet och ännu högre upp, mellan 2400 och upp till de snötäckta topparna över 3000 m, är det främst barrträd som //Pica//, //Abies// och //Taxus//. Så högt upp går dock inte //P. tigrinum//. Den är inte litofyt men den växer även i den steniga bottenförnan i bergens klippiga miljöer.

!Utseende
I färg liknar bladen de hos //[[Paph. villosum|4ada762d-92fa-465b-aee9-f1c979290f41]]// och //[[Paph. parishii|f055157f-6343-488e-b756-ade335685867]]//, men bladen hos //Paph. tigrinum// är styvare och mer upprätta än på de två förra. De fyra till sex bladen som blir tre dm långa och tre cm breda, är också mindre hos //Paph. tigrinum// än hos de båda andra arterna.
Bladspetsen är ojämnt rundade och bildar två lober. Under våren kommer en ensam, gulgrön blomma på den ett par dm korta, upprätta blomstängel. Blomman blir vanligen 14 cm tvärsöver och drygt en dm hög. Den dorsala sepalen är gulgrön med mörkt rödbruna längsgående ränder. Petalerna är färgade i brungrönt mot basen som övergår mer i rosa mot spetsen som böjer skarp nedåt. Varje petal är cirka en cm bred vid basen och tre cm vid den rundade spetsen. Vardera petal är upptill åtta cm lång med två rödbruna, längsgående streck. Läppen är grönbrun, omkring fyra cm stor och spetsig. I det vilda blommar den efter sommarens varma månader, i början av monsunen i juni och tidig juli.

!Skötsel
//Paph. tigrinum// är förvånansvärt lätt att odla. Den växer snabbt och skjuter lätt nya skott. Småplantor med bara ett eller två skott kan vara svårare att sköta. De kan ofta producera skott som dör innan de är fullväxta. Med dessa små plantor, och även alla //Paph. tigrinum// som man önskar i blom, måste man vara mycket noga med att hålla bladrosetten torr så inget vatten blir stående. Vattna bara direkt i krukan.
Den föredrar ljus skugga eller starkt indirekt ljus. Med mer ljus behövs en ökad luftcirkulation och mer vatten. Sommartemperaturen kan gå upp så högt som straxt över 30 grader, medan den under vintertiden kan sjunka till bara tio grader.
I dess naturliga habitat är fuktigheten hög hela året med sommaren som monsuntiden med extra mycket regn. Den verkar föredra vårlika, luftiga, inte för varma, inte för kalla, förhållanden med lätt skuggat ljus. Vattna grundligt, men låt komposten torka till knappt fuktig innan nästa vattning, rötterna klarar inte att vara blöta länge.
På fullväxta plantor bör man ta bort det nedersta, första bladet som annars lätt samlar vatten och bildar grunden för röta. Dela plantan endast när de delar sig själva, och försök i den mån det är möjligt att behålla många skott ihop. Flera tillväxter ger en starkare planta som inte lika lätt drabbas att sjukdom och knoppfall.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum markianum// Fowlie (1990)
//Paphiopedilum smaragdinum// Z.J.Liu & S.C.Chen (2003) 
//Paphiopedilum tigrinum// f. //huberae// Koopowitz (2002)
//Paphiopedilum tigrinum// f. //smaragdinum// O.Gruss (2005)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphmarkianum.htm]]
[[GoreOrchid Conservatory|http://www.goreorchidconservatory.com/SpecPgs/Paph-tigrinum.html]]
[[GoreOrchid Conservatory|http://goreorchidconservatory.com/CatalogAndInfo/Slipper-Orchid-Gallery.html]] häftigt bildgalleri
[[Encanting Myanmar|http://www.myanmar-image.com/enchantingmyanmar/enchantingmyanmar5-1/orchid/]]
[[AntecLaboratory & LadyslipperFarm|http://www.ladyslipper.com/0112-04.htm ]]
[[AntecLaboratory & LadyslipperFarm|http://www.ladyslipper.com/tigcari.htm]] pic
[[TGE WebForum|http://192.192.42.4/~tbgweb/cgi-bin/attachment.cgi?forum=62&topic=1888&postno=1&type=.jpg&name=tig_1131725837]] pic






!Allmänt och utbredning
//Paph. viniferum// är en liten terrestrisk eller ibland litofytisk art som förekommer i Myanmar/Burma eller Laos där den troligen växer längs rinnande vatten i täta städselgröna molnskogar mellan 340 till 1000 meters höjd. Den exakta växtplatsen är inte känd men sedan mitten av 1970-talet har minst ett halvdussin plantor dykt upp i partier av den närbesläktad arten //[[Paph. callosum|58cb8f5a-cf0a-4e8f-b8f2-2e3865819dba]]//.  //Paph. viniferum// är dock mindre och blomman går helt i mörkröda färger, nästan åt det svarta hållet.
Det latinska ''viniferum'' kan översättas med "vinröd" och anspelar på blomman mörka purpurfärg.

!Utseende
De får tre till fem kraftiga grågröna blad, mönstrade i mörka och ljusa gröna nyanser. Bladen blir tre till fem cm breda och upptill 16 cm långa. Blomman, eller väldigt sällan två blommor, kommer under våren eller tidig sommar på en upptill 30 cm lång, luden, lila blomstängel. Blomman blir drygt tio cm stor och kan håll sig fräsch i över en månad. Den dorsala sepalen är mörkt vinröd med mörkare, nästan svarta, ränder. Petalerna är ljust gröna, tätt översållade med svarta vårtor. Även läppen är mörkt vinröd.

!Skötsel
Plantan bör odlas i måttligt starkt ljus och varm temperatur, gärna mellan 19 till 24 grader. Håll den jämnt fuktig, ganska skuggigt hela året. I dess naturliga habitat är november till mars de torraste månaderna och maj till september de blötaste. Odla i små krukor med en väldränerad mix som medelgrov barkkompost, sphagnum och perlite, som håller fukten utan att vara konstant blöt. Vatten regelbundet ungefär var fjärde till femte dag. För att inducera blomning, minska vattningen under vintern och våren.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum callosum// var. //viniferum// Cavestro (2001)
//Paphiopedilum crossii// f. //viniferum// Braem & Chiron (2003)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphviniferum.htm]] 2015-09-22
[[Dr. Tanaka's Home Page|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu24.html]] 2015-09-22










































!Allmänt och utbredning
//Macodes petola// [MAK-oh-deez PET-oh-luh] växer naturligt i lågland och lägre bergsskogar på Borneo, Java, Malaysia, Sumatra till östra Filippinerna och den japanska ön Iriomote mellan 100 och 1500 meters höjd över havet.
Den är närbesläktad med //[[Ludisia|2e46103f-39e7-4868-8aff-aa60b62d1df6]]// så den vill inte ha för mycket direkt solljus.

!Utseende
Det är en liten städselgrön terrestrisk planta, med köttiga, krypande rhizom. Rhizomen bär upprätta stammar med upptill åtta blad i en lös spiralliknade rosett. Bladen är mörkgröna med fem längsgående och otaliga tvärgående nerver i lysande guldgult.
De oansenliga blommorna är rödbruna med en vit läpp och är cirka en cm i diameter. Det kommer upptill 15 stycken blommor på en 20 cm lång, upprätt stängel.

!Skötsel
//Mac. petola// har ett krypande växtsätt som gör att den går utmärkt att odla i ampel. När den har vuxit sig för lång och ranglig så beskärs den för att hållas mer kompakt. Bladen kan lätt brännas, så placera plantan så att bladen inte får stark sol på sig.
Den vill ha mycket svag näring och en hög luftfuktighet utan att duschas. Vattendroppar kan orsaka skador på bladen. Vattningen skall vara jämn under sommaren men den bör torka upp lätt mellan vattningarna under vinterhalvåret.
Plantan planteras i en fin orkidékompost med mycket sphagnum i. Den kan vara svår att få att överleva, men mycket givande om den kan få en varm, fuktigt plats i skugga.

!Synonymer
__Homotypic Synonyms:__
//Neottia petola// Blume (1825)
//Spiranthes petola// Hasskarl (1844)
//Anoectochilus petola// Hereman (1868)
__Heterotypic Synonyms:__
//Anoectochilus veitchianus// Blume (1859)
//Argyrorchis javanica// Blume (1859)
//Anoectochilus veitchii// B.S.Williams (1862)
//Haemaria argyroneura// Miquel (1864)
//Macodes petola// var. //cuprea// Rob. (1864)
//Macodes petola// var. //latifolia// Rob. (1864)
//Macodes petola// var. //superba// Rob. (1864)
//Macodes petola// var. //velutina// Rob. (1864)
//Macodes veitchii// Boxall (1880)
//Macodes xanthophyllus// Boxall (1880)
//Macodes javanica// J.D.Hooker (1889)
//Macodes argyroneura// Rolfe (1896)
//Macodes robusta// Smith (1921)
//Rhomboda confusa// Ormerod (1995)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/macpetola.htm]]
[[OrchidéHuset|http://www.orchidehuset.se/macodes%20petola.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=petola&grupp=macodes&avdelning=latinsktNamn&huvudavdelning=rad]]


























































!Allmänt och utbredning
Arten återfinns epifytiskt i fuktiga lägre bergsskogar i Dominikanska Republiken, de karibiska öarna Leewards, Puerto Rico, Trinidad & Tobago, Windwards, och på sydamerikanska fastlandet i Venezuela, Colombia och nordvästra Brasilien mellan 250 och 1250 meters höjd.
Även om ingen har sett några besökare till //Otm. coccineum// antas det att kolibrier är pollinatörerna eftersom blommorna bildar kopiösa mängder nektar som samlas i en liten påse bildad mellan läppen och basen av könspelaren.
Namnet kommer från latinets ''coccineus'' som betyder "scharlakansröd" och anspelar på blommorna intensivt röda färg.

!Utseende
Det är en kompakt medelstor epifyt som blir upptill 40 cm stor och har ovala, från sidan tillplattade pseudobulber. Från toppen av bulben kommer ett enda långsmalt blad som vid basen är vikt längs mitten. Nya skott produceras något över den tidigare bulben så plantan tenderar att växa upp och ut ur en kruka. Från basen av bladen kommer under vår och sommar en tunn, tre till tio cm lång, hängande blomstängel som bär en ensam blomma, en till två cm stor. Blommorna saknar doft men har en intensivt rödorange färg med en läppen som i mitten är klart gul och håller i upptill tre veckor. Varje planta kan producera mer än 20 samtidiga blomstänglar.

!Skötsel
De växer bra i intermediära temperaturer mellan 14 på natten och 24 grader dagtid, i sitt naturliga habitat kan temperaturen under extrema år gå ner ännu lägre. De behöver ljus skugga, ungefär samma som för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]// men behöver hållas jämnt fuktig och ges hög luftfuktighet. Den får absolut inte torka ut. Odla i en mix av hälften sphagnum och hälften barkkompost.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum coccineum// Jacq. (1760)
//Cymbidium coccineum// Sw. (1800)
//Camaridium coccineum// Hoehne (1947)
//Maxillaria coccinea// L.O.Williams (1954)
__Heterotypic Synonyms:__
//Ornithidium acaule// Hoffmanns. (1843)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxcoccinea.htm]]
[[Plants of Saint Lucia|http://www.saintlucianplants.com/floweringplants/orchidaceae/maxicocc/maxicocc.html]]
[[Ricardo´s Blog, orchids, parrots, fish and people|http://ricardogupi.blogspot.se/2008/10/maxillaria-coccinea-in-puerto-rican.html]]
[[Orchids Forum|https://www.orchidsforum.com/threads/maxillaria-coccinea-in-situ.11674/]]
















!Allmänt och utbredning
Den återfinns terrestriskt eller litofytiskt i mossan och lövkomposten på klippor i de skogsbeklädda kullarna i Sabah, nordöstra Borneo, runt 800 meters höjd.
Arten är uppkallad efter den japanske orkidéentusiasten och artens upptäckaren, Mitsuru Sugiyama. Den är nära besläktad med //[[Paph. hennisianum|19559cca-d5bd-4c71-bc27-61bb6810e032]]//, //[[Paph. dayanum|be3f9e15-e7f3-401f-8ae7-6f0d3b472c86]]//, //[[Paph lawrenceanum|95d324e4-4af0-412e-9f1f-dac2b4142b44]]// och //[[Paph. javanicum|265a9b4f-971a-45d2-a42b-5d524c87368b]]// men har tunnare blad som inte kan lagrar lika mycket vatten. Blommorna liknar de hos //Paph. javanicum var virens// men med större dorsal sepal och mörkt purpurfärgade petaler, översållade med fina, små prickar. Vissa taxonomer anser den vara en variant eller naturhybrid med //[[Paph. hennisianum|19559cca-d5bd-4c71-bc27-61bb6810e032]]//, men de båda arterna skiljs åt av åtskilliga tiotals mil av öppet hav. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Chloroneura.

!Utseende
Det är en liten art som bildar tre till fem tunna, avlånga blad, tio till 14 cm långa och drygt tre cm breda. Undersidan är ljusgrön och ovansidan marmorerad i mörkgrönt och ljust grågrönt. Under sommaren kommer en mer än 30 cm lång blomstängel som bär en ensam, sju till nio cm stor blomma. Den dorsala sepalen är ljusgrön med mörkare nerver. Petalerna är ljusgröna med mörkt purpurfärgade prickar och med tunna hår längs kanterna. Läppen är ljusgrön med nyanser i brunt och rödbruna nerver, formade som en upp-och-ner-vänd, spetsig hjälm.

!Skötsel
Dess naturliga utbredningsområd utsätts för kraftiga regn på vintern och tidig vår, och måttliga mängder regn under hösten och sommaren. Våren är den varmaste säsongen. Ge den en ljus placering utan direkt sol och intermediära till varma temperaturer. De tunna bladen kan inte spara mycket vatten så den behöver jämn vattning hela året utan att torka upp för mycket. Vattna regelbundet ungefär var fjärde till var femte dag. Odla den i en väldränerad mix av medelgrov barkkompost, grov leca och sphagnum eller perlite.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphsugiyamanum.htm]] 2015-08-25
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-sugiyamanum.html]] 2015-08-25
[[Antec Laboratory & Ladyslipper Farm Page|http://www.ladyslipper.com/sugiyamanum1.htm]] 2015-08-25
[[Dr.Tanaka's Paph site|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu25.html]] 2015-08-25
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_sugiyamanum]] 2015-08-25




















































































































!Allmänt och utbredning
//Paph. javanicum// [paf-ee-oh-PED-ih-lum juh-VAHN-ih-kum] är en liten terrestrisk art från Java och Borneo som växer i tjock mull på vulkaniska bergarter i branta bergsskogar nära vattendrag mellan 750 och 1900 meters höjd. De alltid påträffas under vissa arter av ormbunke på mark som luktar ammoniak.
Den är uppkallad efter ön Java där den först hittades. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektionen Barbata undersektionen Chloroneura. Kromosomtalet är 2n=38.

!Utseende
Den har fyra till fem långsmala blad, mer än 20 cm långa och fyra cm breda,  mönstrade i ljust och mörkt grönt.  Det är den enda arten inom släktet som blommar under sommaren och hösten. Den upptill 30 cm lång blomstängel som kan bära en eller två stycken tio cm stora blommor. Blomman är ljust äppelgrön med en rosa ton och med mörkröda prickar på petalerna och ljusröda vertikala ränder på sepalen. Med svala nätter kan blomman hålla upptill tre månader.

!Skötsel
Regionen har torra somrar och höstar. Under vintern och våren utsätts området för kraftiga regn. För att inducera blomningen, minska vattningen och sänk temperaturen till runt tolv grader under vinternätterna.
Alla öppna, väldränerade mixer kommer att fungera om den får varma temperaturer, hög luftfuktighet och ljus skugga under tillväxten. Den tycker om att ha trångt i sin kruka, så ge den en så liten kruka som den fortfarande ryms i.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium javanicum// Reinw. (1850)
//Cordula javanica// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium virens// Rchb.f. (1863)
//Paphiopedilum javanicum// var. //virens// Stein (1892)
//Paphiopedilum virens// Pfitz (1894)
//Cordula virens// Rolfe (1912)
//Paphiopedilum purpurascens// Fowlie (1974)
//Paphiopedilum javanicum// var. //nymphenburgianum// Roeth & O.Gruss (1997)
//Paphiopedilum javanicum// f. //nymphenburgianum// P.J.Cribb (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphjavanicumvarvirens.htm]] 2015-05-26
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_javanicum]] 2015-05-26
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/javanicum/index.html]] 2015-05-26














!Allmänt och utbredning
Det finns <$view field="count"/> arter inom släktet vars utbredning sträcker sig från Brasilien och in i Peru. I naturen regnar det ofta på dem och fuktig luft kommer in från havet och kondenseras när luften trycks upp längs bergsidorna. Regnmängderna varierar något över året där miltoniorna växer, men det är aldrig helt torrt.
Namnet //Miltonia// har länge använts till både miltonia- och miltoniopsisarter. 1976 delades arterna upp i de respektive släktena, där arterna i //Miltonia// kommer från Brasilien och //[[Miltoniopsis|4cb00e77-e639-45a9-85f2-8102538aad1d]]// innehåller de arter som kommer från Colombia.
Miltoniopsisarterna kallas också "Penséorkidéer", "kallväxande miltonior" och "colombianska miltonior" och det är oftast hybrider av detta släkte som säljs i stora mängder i blomsterbutiker runt om i världen. De arter som ingår i miltoniasläktet odlas betydligt mer sällan.

!Utseende
De får ett eller två blad från toppen av pseudobulben. Blomstängeln kommer vanligen runt midsommar fram till tidig höst. Stängeln kommer från en bladskida vid basen av bulben. Blomman har fria sepaler och petaler, en platt läpp, nästan ingen kallus och två hårda polliner. Arterna inom //Miltonia// får stora, attraktiva, hållbara blommor och anses generellt som enkla att odla. Färgmönstren på blommorna kan vara riktigt bisarra. Med undantag av //[[Milt. spectabilis|c5a9dd4f-bd39-4723-b1fc-5d01be445ae9]]// får de flesta arterna mycket liten läpp, jämfört med den stora spektakulära läppen hos //[[Miltoniopsis|4cb00e77-e639-45a9-85f2-8102538aad1d]]//.

!Skötsel
De växer bra monterade på bark, i små krukor som bara ger plats för ett eller två skott ytterligare, eller grunda krukor då skotten ibland breder ut sig i sidled. Miltoniasläktets arter kräver hög luftfuktighet och jämn fuktighet i komposten. Plantorna bör vattnas så att komposten är fuktig under hela tillväxtperioden. Om bladen bildar dragspel, är det ett tydligt tecken på att växten får för lite vatten. Under hösten, när bulberna mognat, skall vattningen minskas. De får dock inte torka ut helt under vintern heller. Under vintern kan man därför spraya plantorna på morgonen och vattna på vanligt vis en gång varannan vecka. Använd en öppen, väldränerad medelgrov barkkompost med en tredjedel mossa. Eftersom en ständigt fuktig kompost snabbt bryts ner växer de bäst om de omplanteras varje år. De flesta kräver kalla eller svala växtförhållanden med hög luftfuktighet. Ordentlig luftväxling rekommenderas, speciellt om plantorna odlas mycket ljust. Vissa arter tillväxer bra även under samma ljusförhållanden som för cattleyor, men deras blad tenderar att bli väldigt gula när det är mycket ljust. De behöver vatten ofta under tillväxtperioden och jämn fuktighet under resten av året utan någon uttalad torkperiod. Om plantan odlas mörkt under vintern kan vattningen reduceras ytterligare något. Dock bör växten aldrig tillåtas torka ut helt. En svag näringsdos, en fjärdedel till halva den rekommenderade dosen, bör ges varje vecka under tillväxten. Gödningen bör minskas under vintern tills vattningen ökar igen under våren.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//[[Milt. spectabilis|c5a9dd4f-bd39-4723-b1fc-5d01be445ae9]]// Lindley (1837)

''Uttal''
mil-TOH-nee-ah

''Synonymer''
__Heterotypic Synonyms:__
//Macrochilus// Knowles & Westc. (1837)
//Gynizodon// Raf. (1838)
//Anneliesia// Brieger & Lückel (1983)
//Phymatochilum// Christenson (2005)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/miltonia.htm]]
[[OrchidSpeciesCulture|http://www.orchidculture.com/COD/FREE/Miltonia_Art.html]]
[[AmericanOrchidSociety|http://aos.org/aos/uploadedfiles/docs/cultureintermedmiltonia.pdf]] pdf
[[Orchids of the World|http://www.orchids.mu/Species/Miltonia/]]
[[Gardening|http://www.webindia123.com/garden/flowers/orchids/miltonia.htm]]
[[Orchids by the Ackers|http://www.orchidsbytheackers.com/Milt.htm]]
[[CityFloral|http://www.cityfloralgreenhouse.com/tips/orchid_miltonia.htm]]
[[All About Orchids|http://www.orchid.org.uk/miltoniacult.htm]]
[[AlohaOrchid Nursery|http://www.alohaorchid.com/MiltoniaCare.aspx]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=grund&grupp=miltonia&avdelning=latinsktNamn&huvudavdelning=rad]]
[[RobertBedard Horticulture|http://www.robert-bedard.com/orchids/miltoniopsis_culture.html]]
[[McLellan Botanicals|http://www.orchidexperts.com/miltonia-care.php]]













!Allmänt och utbredning
Arten förekommer, eller snarare förekom, på de södra sluttningarna av Himalaya, Darjeeling och Sikkim i Indien, längs gränsen mot östra Nepal. Den har tidigare också blivit funnen i provinsen Assam, norr om floden Bramaputra.
Den växte terrestriskt i humusen i djungelns djupa skugga vid basen av klippor, såväl som i mossa och lövkompost som samlats i grenklyckor och längs grumliga flodstränder, mellan 900 och 1500 meters höjd.
Den upptäcktes av dr N. Wallich i Sylhet, nordöstliga Indien, tidigt under 1800-talet. Det var den första paphiopedilumen som upptäcktes, beskrevs och introducerades till Europa. //Paph. venustum// har används flitigt inom hybridiseringen sedan dess. Tyvärr tros den numera vara utrotad i det vilda.

!Utseende
Det är en medelstor orkidé som kan bli upp till fyra dm hög. Bladverket är ett av det vackraste inom släktet, med långa, smala blad mönstrade i blått på ljust grönt och med prickiga mönster på den mörkt purpurfärgade undersidan. Bladen kan bli upptill tre dm långa och fyra och en halv cm breda.
Arten är känd för sin magnifika, färgade nervatur på läppen. Den dorsala sepalen är randig i grönt och vitt. Läppen har ett fasinerande och intrikat mönster i varma färger i bronsgrönt, och tillsammans med vårtor och hår på de utsträckta petalerna har den allt man kan önska hos en paph. De sex cm långa och åtta cm breda blommorna kommer solitära på en eller ett par dm långa, upprätta purpurfärgade blomstänglar, vanligen under senvintern eller tidiga våren.

!Skötsel
Plantan är lättodlad och föredrar en vanlig standardkompost för paphar. Den växer svalt eller tempererat i djup skugga. Den behöver en fuktig omgivning och mycket vatten hela året om, gärna varmt under sommaren och en aning svalare vintertid.
I dess naturliga habitat förekommer kraftiga regn under hela sommaren, med temperaturer upptill 32 grader under dagen och inte svalare än 18 nattetid. Under hösten när monsunen anländer blir det torrare och svalare. Under ett par vintermånader kan temperaturen falla till drygt 20 grader dagstid och ner till sex grader under natten. Under vintern är det få regntillfällen, men frekvent dimma, dagg och låga moln håller området fuktigt så det aldrig är helt torrt.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium venustum// Wall. (1820)
//Stimegas venustum// Raf. (1838)
//Cordula venusta// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium pardinum// Rchb.f. (1869)
//Cypripedium venustum// var. //spectabile// Burb. (1874)
//Cypripedium venustum// var. //measuresianum// auct. (1893)
//Paphiopedilum pardinum// Pfitzer (1894)
//Paphiopedilum venustum// var. //pardinum// Pfitzer (1903)
//Paphiopedilum venustum// var. //bhutanensis// Pradhan (1979)
//Paphiopedilum venustum// var. //rubrum// Pradhan (1979)
//Paphiopedilum venustum// var. //teestaensis// Pradhan (1979)
//Paphiopedilum venustum// f. //measuresianum// Braem (1998)
//Paphiopedilum venustum// f. //pardinum// Braem (1999) 

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphvenustum.htm]]
[[Paphs|http://paphs.net/media/Paphs/venustum.htm]]
[[Phils OrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_venustum.htm#b.%20PAPHIOPEDILUM%20VENUSTUM%20(Wall%20]]
[[Botanica Ltd|http://www.botanicaltd.com/images/species/species%20photo+description%20pages/paphiopedilum-venustum.htm]]
[[Sharons OrchisPage|http://www.sdahldtp.com/paphvenustum.htm]] (pic)







































!Allmänt och utbredning
Denna miniatyrart är endemisk för norra och östra Kubas kuststräcka där den växer epifytiskt på buskar och tunna grenar på låga altituder.
Den är uppkallad efter den amerikanske botanikern Hawkes.

!Utseende
Den saknar pseudobulber utan bildar en liten solfjäder med köttiga, trekantiga blad som sällan blir mer än tre cm långa. Den skickar ut fem till tio cm långa utlöpare som bildar nya solfjädrar och kan bilda hela kedjor av små plantor. När som helst under året kan den bilda upptill åtta cm långa blomstänglar som i toppen bär en grupp med två till fyra centimeterstor blommor. Läppen är ljusrosa med en mörkgul fläck mot basen.Petalerna är ljusrosa mot spetsarna och mörkröda med bruna prickar mot basen. Den dorsala sepalen är minst och ljust rosa.

!Skötsel
Den behöver vatten ofta då den saknar vattenlagrande bulber men samtidigt vill den torka upp snabbt igen, så en god rutin är att duscha den dagligen och vattna mer rejält en eller två gånger i veckan, vid varmt väder kan den behöva duschas två gånger om dagen. I sitt naturliga utbredningsområde får de regn ofta, sedan torkas de nästan omedelbart ut av varma havsvindar. Under en period på ungefär tre månader under vintern är den genomsnittliga nederbörden något mindre, men förhållanden är snarare bara något mindre våt än egentligt torr. 
Ge den en ljus och varm växtplats med god luftcirkulation, den behöver mycket ljus för att producera blommorna, 20000 till 30000 lux, men måste skyddas från direkta middagssol. Sommartid kan temperaturen gå över 30 grader dagtid och ner till 22 under nätterna, vintertid tre eller fyra grader lägre. Odla den monterad på bark eller kork, eller i små krukor med grov barkkompost. Semihydro har också rapporterats ge goda resultat.

!Synonymer
__Homotypic Synonyms:__
//Oncidium hawkesianum// Moir (1967)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/tolhawkesiana.htm]] 2015-10-07





































!Allmänt och utbredning
Denna minatyrart växer oftast epifytisk på kaktusar eller litofytiskt i kustnära låglandsskogar från Panama norrut till Colombia, Ecuador och Peru, vanligtvis nära havsnivå men även insamlad på 1200 meters höjd över havet.
Den kan fortfarande hittas i handeln märkt //Oncidium onusta//, men den flyttades efter DNA-studier till ett helt eget släkte av Chase och Williams 2001. Kromosomtalet är 2n=56. Den troligaste pollinatören är ett //Xylocopa//-bi.

!Utseende
De små, drygt två cm stora pseudobulberna är koniskt ovala med längsgående fåror. Basen av bulberna är omsluten av två, tre välutvecklad täckblad. Bulberna kommer tätt tillsammans på rhizomet med en grågrön färg översållad med purpurprickar. Från toppen av bulben kommer vanligen ett ensamt långsmalt, upptill tio cm långt blad, men den kan även ha två blad. Hela plantan blir sällan större än 13 cm. Blomstängeln kommer under sensommar eller tidig höst från basen av bulben och välver sig upp, utåt 20 cm och bär en klase med åtta till 14 gyllengula, doftlösa, två cm stora blommor som håller under upptill tre månader. Blomstängeln kan grena sig efter att blommorna fallit och komma med nya blommor. Under rätt växtförhållanden kan den också blomma en andra gång under våren.

!Skötsel
Ge den en ljus växtplats med bara skydd för den starkaste solen, allt utom norrfönster går bra, runt 12000 till 24000 lux, och jämn vattning under tillväxtperioden. I naturen förlitar de sig på att den dagliga dimman ska ge dem den fukt de behöver. Efter blomningen behöver de en viloperiod utan vatten eller gödning tills den nya tillväxten kommer igång under våren. Vid övervattning är risken för röta eller svampangrepp överhängande. I sitt naturliga habitat växer den på kaktusar och trädgrenar med tjock mossor. Från början trodde man att denna planta måste hållas helt torr mellan vattningarna men nyare undersökningar har visat att rötterna faktiskt gräver sig in i sin värdkaktus och drar fukt från den.
De odlas bäst monterade eller i en lerkruka med en väldränerad kompostmix som tillåter rötterna att torka upp snabbt efter vattningen.

!Synonymer
__Homotypic Synonyms:__
//Oncidium onustum// Lindley (1833)
__Heterotypic Synonyms:__
//Oncidium holochrysum// Rchb.f. (1862)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/onconustum.htm]]
[[OrchidWiki|http://orchids.wikia.com/wiki/Zelenkoa_onusta]]
[[Orchid Web|http://www.orchidweb.com/products/zelenkoa-onusta~79.html]]
[[Botanica Ltd.|http://www.botanicaltd.com/images/species/species%20photo%2Bdescription%20pages/zelenkoa-onusta-%27tristan%27.htm]]

;Wilma J. Ferry, 2012
://A Detailed Review of //Zelenkoa onusta// (2001)//, The McAllen International Orchid Society Journal vol. 13 iss. 1 (January 2012), pp. 10-16.
:http://miosjournal.org/journal/2012/01/DetailedReviewZelenkoa.html
























































!Allmänt och utbredning
Arten påträffas framförallt i norra Ecuador, där den växter epifytiskt i fuktiga, tempererade molnbergsskogar, främst på höjder mellan 1200 och 3000 m. Dess största utbredningsområden är i provinserna Carchi mellan Tulcan och Maldonado, på en höjd av 2150 till 2600 m, i norra Ecuador och i Imbabura på flera platser nära Apuela på en höjd mellan 2300 och 3000 m, även det i norra Ecuador. I centrala Ecuador finns den i Napo-provinsen, nära Papallacta på en höjd av 2800 m och i den östra delen av Ecuador i provinsen Pichincha på flera ställen på höjder mellan 1200 och 2800 m, men främst över 2000m. Även om det finns rapporter om förekomst i Colombia och Peru, det finns inga uppgifter om den naturliga livsmiljön.
Den är nära besläktad med //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]//.

!Utseende
Plantorna blir sällan större än 15 cm höga, med ett sympodialt växtsätt med krypande pseudobulber som kommer ganska långt ifrån varandra. Bulberna som blir tre cm långa och sju mm breda, är ovala och tillplattade från sidorna. Basen är omsluten av pappersaktiga täckblad. I toppen av bulberna kommer ett ensamt blad, upptill 13 cm långt och två cm smalt. 
De hållbara blommorna kommer vanligen under vinter och vår, fram till april. Blomställningen kan bli mer än två dm lång och bär oftast åtta centimeterstora blommor tätt tillsammans på ena sidan av den övre tredjedelen av stängeln. De klart orangea eller svavelgula blommorna har en helt vit läpp.

!Skötsel
I dess naturliga miljö utsetts den för extremtemperaturer mellan nollgradigt och upp till 34 grader, men under hela året är medeltemperaturen runt 24 under dagen och ner till 12 grader under natten. De varmaste dagarna, kallaste nätterna och därmed den största skillnaden är under molnfria, soliga dagar under torrperioden på vintern då den kan utsättas för 15000 till 30000 lux. Den behöver då en god luftcirkulation för att inte bränna bladen.
Under större delen av året ligger luftfuktigheten mellan 75 och 80%. Under två till tre vintermånader sjunker den till 60%. Nederbördsmängden under vintermånaderna ligger runt 20 mm per månad och under sommarmånaderna upptill 180 mm per månad. 
Fukta eller vattna var eller varannan dag. Ge svag gödning ofta, en fjärdedel till halva den rekommenderade dosen varje vecka under tillväxten. Många odlare föredrar att använda ett balanserar gödningsmedel, medan andra från vår till midsommar ger höga kvävehalter och från mitten av sommaren till hösten, ger extra fosfor. Ge en torrare vintervila utan gödning, men om bulberna börjar skrumpna öka vattningen försiktigt, för mycket vatten dödar lätt växten, speciellt vid lägre temperaturer och dåliga ljusförhållanden.
De odlas bäst monterade på kork eller ormbunke, men om den får en väldigt lös och luftig kompost som håller fukten går de även bra i kruka.

!Synonymer
__Homotypic Synonyms:__
//Brachtia andina// Rchb.f. (1856)
__Heterotypic Synonyms:__
//Brachtia verruculitera// Schltrer (1920)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/brachandina.htm]]































!Allmänt och utbredning
Den har blivit insamlad i Cameron, Afrika, upptill 600 meter över havet. Där växer den som en varmväxande epifyt i låglandsskogarna.

!Utseende
Den får små äggformade pseudobulber, upptill fem cm höga, med ett ensamt, tjockt lansettlikt, läderartat blad.
Den blommar under vintern, på en blomstjälk som kan bli mellan två cm och åtta dm lång. Blomman blir lik den hos //[[Bulb. barbigerum|779939be-f66a-4f5c-a47d-b2bb35b265bb]]//, med en rörlig läpp beströdd med långa hår.

!Skötsel
Arten växer bäst under varma, fuktiga förhållanden, och behöver ett medium som kan hålla vatten. Den kräver lätt skugga och god luftväxling. Rötterna växer inte speciellt djup så en grund kruka är att föredra.
Man ska vara speciellt försiktig vid omplanteringar eftersom plantan lätt blir infekterad. Omplantering under blomningen ska helt undvikas.

!Synonymer
__Homotypic Synonyms:__
//Phyllorkis saltatoria// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/%20bulbsaltatorum.htm]]
[[Vivis OrchidsCorner|http://viviorchids.com/orcnr-95.html]]


























































































































































































!Allmänt och utbredning
Arten har ett stort utbredningsområde men är trots det inte vanlig, men påträffas i Andernas fuktiga bergsskogar i Colombia, Venezuela, Ecuador, Peru och Bolivia mellan 500 och 2100 meter över havet.

!Utseende
Det är en liten planta vars underjordiska stam är grön eller mörkt lila. Bladen är tjocka och glansigt gröna. Blomstängeln kan komma när som helst under året men vanligast är under vinterhalvåret och våren och den bär ett fåtal centimeterstora blommor som nästan vilar längs mittnerven nära basen på bladen. Dessa blommor är gul till silvergrå med ljust rosaröda strimmor som öppnas successivt på stängeln. De två övre petalerna har utvecklats till något som liknar smala antenner.

!Skötsel
Plantan trivs bäst under svala, eller möjligen tempererade, förhållanden med full skugga och hög luftfuktighet. En god luftcirkulation är också en fördel.

!Synonyms
__Homotypic Synonyms:__
//Restrepia nuda// Klotzsch (1852)
__Heterotypic Synonyms:__
//Restrepia vittata// Lindley (1848)
//Pleurothallis hemirhoda// Lindley (1852)
//Restrepia biflora// Regel (1856)
//Restrepia vittata// var. //biflora// Regel (1856)
//Humboldtia hemirhoda// Kuntze (1891)
//Dubois-Reymondia hemirhoda// Brieger (1977)
//Lindleyalis hemirhoda// Luer (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurhemirhoda.htm]]
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/pleurothallis_hemirhoda.htm]]
[[SpeciesSpecific|http://www.species-specific.com/view-orchid-species-information.php?id=79]]
[[PBase|http://www.pbase.com/image/7836700]] bild
[[CalPhotos|http://calphotos.berkeley.edu/cgi/img_query?stat=BROWSE&query_src=photos_flora_sci&where-genre=Plant&where-taxon=Pleurothallis+hemirhoda]] bilder
[[Orchid Species Photographs|http://www.orchidphotos.org/images/orchids/speciesV2/Pleurothallis/pleurothallishemirhoda4_318.html]] bild
"""






































!Allmänt och utbredning
Det är en liten art som är hemmahörande i Burma, Laos, Thailand, Vietnam, Kina, östra Himalaya, Bangladesh och provinsen Assam i Indien, på träd och klippor mellan 700 och 1100 meters höjd.

!Utseende
Arten har ett kompakt växtsätt med pseudobulberna tätt ihop. De upprätta bulberna har längsgående fåror och kan bli 30 cm långa. De är tjockast på mitten och avsmalnande mot ändarna med två till tre läderartade blad mot toppen. Från noder nära toppen kommer under vintern och tidig vår blomstänglar som kan bli 30 cm långa med ett kluster av blommor i spetsen. De fyra till fem cm stora, klargula blommorna håller upptill två veckor och doftar starkt av honung.

!Skötsel
Det är en av de härdigaste orkidéarterna och kan tolerera ett brett spektrum av klimatförhållanden. Ge den ett halvår med regn och ett halvår med en sval torka, båda med maximalt solljus, så kommer den blomma regelbundet. Den behöver kopiösa mängder vatten och gödning under tillväxtperioden.
Odla plantan i krukor med mager kompost.

!Synonymer
__Homotypic Synonyms:__
//Callista chrysotoxa// Kuntze (1891)
__Heterotypic Synonyms:__
//Dendrobium suavissimum// Rchb.f. (1874)
//Dendrobium chrysotoxum// var. //suavissimum// A.H.Kent(1888)
//Callista suavissima// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrobiumchrysotoxum.htm]]
























































!Allmänt och utbredning
//Paph. victoria-mariae// är en art endemisk för området runt Bukittinggi på västra Sumatra där den växer terrestriskt eller litofytiskt i djup skugga i raviner med fuktig mossa på kalkstensklippor eller vulkaniska klippor mellan 1800 och 2200 meters höjd. Den är mycket sällsynt med en begränsad utbredning och arten har minskat betydligt under de senaste decennierna. Antalet vuxna individer beräknas vara mindre än 50 individer i en enda population.
Den samlades ursprungligen in av Wilhelm Micholitz 1891 medan han reste för den engelska plantskola Frederick Sander. Micholitz hörde först om en ny orkidéart från en herr Schluechter, som var en bokhållare på en lokal kaffeplantage, och var tvungen att betala honom 500 gulden för att avslöja dess verkliga plats. Den kallades ursprungligen //Paph. victoria-regina// men ett år senare döptes den om till //Paph. victoria-mariae// då Sander visade plantan för Royal Horticultural Society samma dag den brittiska prinsessan Victoria-Maria, senare drottningen av Storbritannien, och hertigen av York förlovade sig. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Cochlopetalum. Kromosomtalet är 2n=30.

!Utseende
Den bildar 30 cm långa och sex till sju cm breda ljusgröna blad, svagt mönstrade i mörkare grönt. Mot basen är bladen behårade och undersidan är täckt med purpurfärgade prickar. Under våren kommer en blomstängeln som i naturen kan bli över 120 cm lång men i odling sällan över metern. Stängeln bär flera blommor under större delen av året, men inte fler än två eller tre stycken är öppna samtidigt. Blommorna liknar de hos //[[Paph. victoria|8f6674ad-39da-4b4f-9369-7a66ed3bed84]]// men saknar de sex rosa till rödbruna ränder på den dorsala petalen. Petalernas kanter på de åtta cm stora blommorna blir väldigt vågiga, ljust gröna med rödbruna kanter. Den dorsala sepalen är limegrön mot mitten med en ljusare kant. Läppen är rosa till rosaröd med en gulaktig eller ljust gulgrön kant.

!Skötsel
I dess naturliga utbredningsområde utsätts den för kraftigt regn på vintern till våren och ofta förekommande lätta regn under sommaren.
Ge den en skuggig växtplats med hög luftfuktighet och intermediära temperaturer. I naturen växer den på mycket skuggiga platser men den tillväxer och blommar bättre om den får lite mer ljus. Odla i en väldränerad mix av medelgrov barkkompost och perlite. Plantera varje år innan komposten bryts ner alltför mycket.
Håll den jämnt fuktig och låt den bara torka upp helt lätt mellan vattningarna. För att inducera blomningen behövs en kort period under vintern med minskad vattning. Plantan kan vara svårt att få att överleva under långa tidsperioder. Den bör inte tillåtas blomma för mycket. Denna art kan bokstavligen blommar sig till döds genom att förbruka all sin energi på blomstängeln. Vid omplanteringen är det bäst att skära av alla blommande stänglar för att låt den bilda nya rötter och starka nya skott. Om plantan är på tillbakagång men fortfarande blommar och har blommat under en längre tid är det bäst att skära av stänglarna för att låta plantan vila och återfå styrka.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum chamberlainianum// f. //victoria-mariae// Rolfe (1893)
//Cypripedium victoria-mariae// Sander (1896)
//Cordula victoria-mariae// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphvictoria-marie.htm]] 2015-09-05
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/cochlopetalum/victoriamariae/index.html]] 2015-09-05
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_victoria-mariae]] 2015-09-05



























































































































































!Allmänt och utbredning
//Paph. micranthum// är en liten art från norra delen av Guangxi, sydöstra Yunnan och västra Guizhou i Kina och nordvästra Vietnam där den växer terrestriskt eller litofytiskt i skrevorna på branta kalkstensklippor eller mer sällan epifytiskt vid basen av mossiga träd i bergsmolnskogar mellan 360 och 1700 meters höjd. Den upptäcktes redan 1940 men beskrevs först mer än 10 år senare, 1951, och då på kinesiska så det dröjde ända till 1970 innan resten av världen lärde om upptäckten.
Artnamnet härstammar från grekiskans ''mikrotes'' som innebär litenhet och ''anthos'' som betyder blomma. Den felaktiga beskrivningen av blommans ringa storlek är troligen baserad på en dissekerad knopp. Taxonomiskt tillhör den undersläkte Parvisepalum. Kromosomtalet är 2n=26.

!Utseende
Den bildar tre till fem stycken fem till 15 cm långa blad, mönstrade i ljust och mörkt grönt. Undersidan är översållad med purpurfärgade prickar. Under våren och sommaren kommer en mellan tio och 25 cm lång blomstängel som bär en ensam blomma. Blomman kan bli så stor som 14 cm. Den dorsala sepalen, petalerna och läppen är gulaktiga till vitaktig, ibland med skiftningar i ljusrosa, ådrad med purpur. Den stora, uppsvällda läppen är ljusrosa eller vit med lila fläckar på insidan. Staminode är vit med purpurfärgade fläckar och övergår i gult mot toppen.

!Skötsel
Den föredrar en svalare och fuktigare omgivning än de andra arterna inom undersläktet Parvisepalum. Området där den växer fuktas enbart av dimma under vintern och genom kraftiga regn från slutet av våren genom hela sommaren. Ge plantan en placering i ljus skugga med intermediära temperaturer från nollan som kallast under vintern till 27 grader på sommaren och med en luftfuktighet runt 60 till 80%. Den har lätt för att blomma och kräver en väldränerad mix med en blandning av grus, perlit och medelgrov barkkompost. Ett problem med //Paph. micranthum// i odling är dess revande växtsätt, nya skott kommer på rhizomen ibland tio cm från moderskottet och den behöver därför stora, grunda skålar eller hängande korgar för att utlöparna ska kunna bre ut sig.
Halvera vattningen under vintern och ge plantan en ljus och sval vintervila. För att inducera blomning får temperaturen inte överstiga 15 grader dagtid under två månader på vintern. I dess naturliga utbredningsområde är vintern den tid då den får mest ljus och de torraste förhållanden. Den kan vara känslig för röta om den hålls alltför fuktig eller mörkt under denna väldigt svala period, men den får inte torka ut helt.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum micranthum// subsp. //eburneum// Fowlie (1993)
//Paphiopedilum micranthum// var. //alboflavum// Braem (1994)
//Paphiopedilum micranthum// var. //glanzeanum// O.Gruss & Roeth (1994)
//Paphiopedilum micranthum// f. //alboflavum// Braem (1998)
//Paphiopedilum micranthum// f. //glanzeanum//O.Gruss & Roeth (1999)
//Paphiopedilum globulosum// Z.J.Liu & S.C.Chen (2002)
//Paphiopedilum micranthum// var. //oblatum// Z.J.Liu & J.Yong Zhang (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphmicranthum.htm]] 2015-05-28
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/parvisepalum/micranthum/index.html]] 2015-05-28
[[Orchid Japan|http://www.orchid.or.jp/orchid/people/tanaka/perv/enpervcult2.html]] 2015-05-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_micranthum]] 2015-05-28
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242335745]] 2015-05-28
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Paphiopedilum-micranthum&lang=en]] 2015-05-28



















!Allmänt och utbredning
Det är en epifytiskt, litofytiskt eller terrestriskt växande art från tropiska och subtropiska Asien. Funnen i Indien, Ceylon, Myanmar, Malaysia, Thailand, Vietnam, China, Japan, Sumatra, Borneo, Filippinerna och Fiji där den växer i varma låglandsskogar på eroderade kalkstensklippor mellan 400 och 1650 meter över havet.

!Utseende
Den har ovalt långsmala pseudobulber som bär två avlånga, rundade blad. Den blommar under hösten på en lång, smal, upprätt blomstängel översållad med mycket små blommor i vitt med gul läpp. Blommorna har en svag doft av lime, som verkar bli starkare under natten.

!Skötsel
Den vill ha en skuggig växtplats med en temperatur som svalast 15 grader och inte varmare än 30 grader. Håll plantan fuktig, med tre till fem vattningar per vecka. Låt den bara torka upp lätt mellan vattningarna.

!Synonymer
__Homotypic Synonyms:__
//Malaxis viridiflora// Blume (1825)
//Leptorkis viridiflora// Kuntze (1891)
//Stichorkis viridiflora// Marg., Szlach. & Kulak (2008)
__Heterotypic Synonyms:__
//Liparis longipes// Lindl. (1830)
//Liparis pendula// Lindl. (1838)
//Liparis spathulata// Lindl. (1840)
//Sturmia longipes// Rchb.f. (1855)
//Liparis boothii// Regel (1864)
//Liparis stachyurus// Rchb.f. (1872)
//Liparis longipes// var. //spathulata// Ridl. (1886)
//Liparis triloba// Ridl. (1886)
//Cestichis pendula// Pfitzer (1888)
//Leptorkis longipes// Kuntze (1891)
//Leptorkis stachyurus// Kuntze (1891)
//Leptorkis triloba// Kuntze (1891)
//Stichorkis pendula// Pfitzer (1897)
//Cestichis longipes// Ames (1905)
//Liparis pleistantha// Schlechter (1919)
//Liparis piestopus// Schlechter (1925)
//Liparis simondii// Gagnep. (1950)
//Liparis viridiflora// var. //spathulata// A.N.Rao (2010) with incorrect basionym

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lipviridifolia.htm]]




















































































































































!Allmänt och utbredning
Kew Royal Botanical Garden har <$view field="count"/> accepterade arter inom //Christensonella// som separerats från sektion Urceolatae i //[[Maxillaria|54758670-0166-4014-8c61-7fdf63c69492]]// med hjälp av modern DNA-sekvensering. Trots att släktets arter är lätta att skilja från //[[Maxillaria|54758670-0166-4014-8c61-7fdf63c69492]]// är de svåra att identifiera till den specifika arten, mest beroende på den variabla morfologin och utspridda distributionen inom respektive art. 
De flesta arterna är spridda från Minas Gerais i Brasilien till Misiones i Argentina, med några få arter koncentrerade i Central- och västra Sydamerika, från Bolivia till södra Mexiko.
Namnet är en hyllning till den numera bortgångna amerikanske botanikern Eric A. Christenson.

!Utseende
Arterna inom //Christensonella// kan lätt särskiljas från //[[Maxillaria|54758670-0166-4014-8c61-7fdf63c69492]]// genom sina vitaktiga till gula eller röda till mörkröda blommor, vanligen med en skinande fläck mitt på läppen, och rötterna med en årlig tillväxt av velamen. De är små plantor med avlånga eller cylindriska pseudobulber vars bas är täckta med halvgenomskinliga eller brunaktiga täckblad. Bulberna växer tätt ihop längs rhizomet och bär ett eller två, suckulenta, nållika blad som vanligen är tjocka och styva. Den mycket korta blomstängeln bär endast en liten till medium stor klockformad blomma. Läppen är treflickig och fäster vid könspelarens fot som är kort och massiv.

!Skötsel
Plantorna har väldigt olika temperatur- och ljuskrav beroende på vilken art de tillhör. De kan odlas i fin barkkompost, ren sphagnum mossa eller monterade på trädormbunke eller kork. Vattna regelbundet och håll komposten fuktig men inte blöt. Plantorna behöver en halvtorr viloperiod under vintermånaderna.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Maxillariinae

''Typart''
//[[Christensonella subulata|f2a6592c-6400-45ed-a791-6b73138dd0f5]]// Szlach., Mytnik, Górniak & Smiszek (2006)

''Uttal''

''Synonymer''
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Christensonella]]
[[Polish Botanical Journal|http://www.ib-pan.krakow.pl/pubs-pdf/Polish%20Botanical%20Journal/2006/Pbj51-1_s57-60.pdf]]  51(1): 57–59, 2006





















!Allmänt och utbredning
Denna epifytiska art är lokalt mycket vanligt förekommande men den är endast känd från ett buskdominerat hedområden vid kanten av trädgränsen i dalgången Páramo de Jurisdicciones i östra delen av bergskedjan Cordillera i regionen Santander, centrala Colombia runt 2700 meters höjd över havsnivån.
Artepitetet kommer från det grekiska ordet ''chameleon'' som betyder "krypande lejon" och anspelar på dess ringa höjd och krypande växtsätt.

!Utseende
Den saknar pseudobulber utan de rundade blad kommer på en lång stjälk från en underjordisk horisontell stam. De små blommorna, upptill fem cm stora, kommer under vår och sommar på en tunn, fem till tio cm lång stängel på baksidan av bladskivan. Blommorna kommer en och en successivt under flera veckor med blommor som mycket liknar de hos [[Rstp. guttulata|a0a88bee-b4ba-4291-b3f3-6d19da2a43c7]] med en vit eller svagt gul synsepal med ränder eller prickar i lila. Läppen har markant konvexa kanter som särskiljer den från [[Rstp. guttulata|a0a88bee-b4ba-4291-b3f3-6d19da2a43c7]]. Dessutom har läppen en annan färgnyans än synsepalen, ofta rosa eller orange.

!Skötsel
Denna art är sällsynt i odling, även om den inte utgör några särskilda svårigheter. Den vill ha en sval och halvskuggig växtplats. För att få den att frodas behövs en ständigt fuktig kompost under tillväxten och hög luftfuktighet tillsammans med bra luftcirkulation.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/reschameleon.htm]]
[[The Pleurothallid Alliance|http://www.pleurothallids.com/index.php?option=com_content&view=article&id=878&Itemid=58]]
[[Orchidés en Nord|http://www.orchid-nord.com/restrepia/restrepia_chameleon/rest_cham.htm]] på franska

















!Allmänt och utbredning
//Mxl. xerophyticum// [mex-ih-PEE-dee-um zer-oh-FY-tee-kum] är endemisk för ett litet område i Mexiko. Det är en terrestrisk eller litofytisk orkidé som växer i sprickor på kalkstensklippor, skyddade från solen upptill 350 meters höjd över havet. 
Arten upptäcktes i september 1985 av Herbito Hernandez i Oaxaca, Mexiko. I september 1988 återvände Hernandez, Eric Hagsäter, Gerardo Salazar och Miguel Soto till platsen för upptäckten och hittade sju plantor. Skott samlades in för studier och arten beskrevs som //Phragmipedium xerophyticum// av Soto Arenas, Salazar & Hagsäter i december 1990. En del av växterna exporterades till phragmipedium-experter runt om i världen, bland annat Lucille McCook i USA, som fick två kloner. Dessa två kloner fick senare namnet ''Oaxaca'' och ''Windy Hill'', och är ursprunget till varje //[[Mxl. xerophyticum|2e148571-0329-4522-8773-c70c8ae6b88d]]// i odling idag. 1992 överförde Albert & Chase arten till det nyskapade släktet //Mexipedium// bland annat på grundval av dess xerofytiska egenskaper.
Artepitetet ''xerophyticum'' betyder "föredrar torra förhållanden". Kromosomtalet är 2n=20, en av skillnaderna till de närbesläktade //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]// och //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]//.

!Utseende
Det är en liten art som har en för underfamiljen ovanlig tillväxt i och med att den tenderar att spridas genom utlöpare, med fem till tio centimeters avstånd från moderplantan. Rötterna kommer från basen av det nya skottet, inte från rhizomet. Den bildar en rosett med fem till åtta blad, upptill tolv cm långa och en till tre cm breda. De köttiga, silvergröna bladen är små, stela och halv upprätta. När den 15 cm långa blomstängeln kommer under våren eller hösten kan den hos en välväxt planta bära upptill tio blommor per gren med en till fyra grenar per stängel. Blommorna är öppna en i taget under flera månader. De är runt två cm stora, varje blomma håller upptill två veckor, är vita till ljusrosa och har en sköldliknande, rosa staminoid och en toffel-formad läpp. De krökta petalerna är skärformade.

!Skötsel
Arten växer tillsammans med andra torktåliga arter som //Agave// och //Plumeria// under varma och fuktiga förhållanden i ljus skugga, runt 25000 lux, där den får uthärda perioder med kraftig torka. Som liten planta kräver den mindre ljus, ungefär som för paphiopedilumplantor. Men när den tillväxer kan den vänjas vid mera ljus, upptill 45000 lux, vilket ger större och kraftigare plantor. Den behöver jämn temperatur hela året, mellan 20 och 26 grader, under nätterna vintertid möjligen ett par grader kallare, och en nästan helt torr period från december till mars. Vattna varannan till var tredje dag under tillväxtens varma dagar och låt den bara torka upp lätt mellan vattningarna. Ge svag gödning varannan vecka. Vintertid kan det få gå längre mellan vattningarna men låt den inte torka ut helt.
Odla i grunda, vida krukor eller skålar med en väldränerad mix av fin eller medelgrov barkkompost och perlite, gärna med tillsats av krossad kalksten eller musselskal som toppdressing. Vid omplanteringen kan den lätt delas så länge utskottet börjat bilda egna rötter.

!Synonymer
__Homotypic Synonyms:__
//Phragmipedium xerophyticum// Soto Arenas, Salazar & Hágsater (1990)
//Paphiopedilum xerophyticum// V.A.Albert & Börge Pett. (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/mexxerophyticum.htm]] 2015-12-02
[[Ladyslipper|http://www.ladyslipper.com/mexipedium.htm]] 2015-11-19
[[Slipperorchids.info|http://slipperorchids.info/mexdatasheet/index.html]] 2015-11-19
[[OrchidsWiki|http://orchids.wikia.com/wiki/Mexipedium_xerophyticum]] 2015-11-19
[[eMOnocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:126639]] 2015-11-19






















!Allmänt och utbredning
Arten, som i naturen är mycket allvarligt hotad, är endemisk för Malaysias arkepelago, där den växer på ett fåtal ställen från Sumatra och Java till Borneo och Sulawesi, mellan 250 och 1600 meters höjd över havet.
Den är en av få paphar som växer epifytiskt, i små fickor av mossa och halvtnedbrutna löv i trädens grenklykor. I undantagsfall växer den också litofytiskt. Arten, som otvivelaktigt är en av släktets vackraste, infördes i Europa 1846.
Kromosomtalet är 2n=26.

!Utseende
I naturen växer //Paph. lowii// i små populationer med några få individier tätt tillsammans. Det är en utomordentlig multiblommande paph för vem som helst utan växthus. De är medelstora, tillväxer lätt och blommar vid mycket lägre ljusnivåer än många andra inom släktet.
Plantan bär fyra till sex köttiga, klart mörkgröna blad. Den upptill meterlånga blomstängeln som kommer under våren eller sommaren, kan bära två till sju halvannan dm stora blommor. Den bär en eller två öppna blommor åt gången, med varje blomma som håller två till fyra veckor ger den flera månader av blommning. De vridna petalerna är gulgröna som mot spetsen övergår i rosa, täckta med rödbruna prickar. Den dorsala sepalen är mörkt rödbrun som ljusnar till klart gulgrön med klargrön nervatur. Läppen är rödbrun som övergår i ljusgrönt med purpurfärgade nerver. Både blomma och stängel är finhårig.

!Skötsel
Arten är varmväxande och trivs i en öppen, väldränerad kompost. Den kräver mycket vatten och näring under tillväxten. Den klarar mycket sol, näst intill så bladen bränns, men den blommar villigt även om ljusintensiteten är lägre. Den uppskattar en hög luftfuktighet.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium lowii// Lindley (1847)
//Cordula lowii// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphlowii.htm]]
[[BeautifulOrchids|http://www.beautifulorchids.com/orchids/orchids_potted/paphiopedilum/paphiopedilum_lowii.html]]
[[Paphs|http://paphs.net/media/Paphs/lowii.htm]] (pic)
[[AntecLaboratory & LadyslipperFarm|http://www.ladyslipper.com/pplowii.htm]] (pic)
[[BurleighParkOrchids|http://www.speciesorchids.com/PaphiopedilumLowii.html]]
[[ArgusOrchids|http://www.argusorchids.net/images/photopages/p_lowii_photopage.htm]]
!Allmänt och utbredning
//Ludisia// tillhör en grupp släkten i undertribusen Goodyerinae som gemensamt kallas "Juvelorkidéer". Dessa odlas mer för sitt vackra bladverk än för blommorna som oftast är ganska oansenliga. Några få arter bland juvelorkidéerna, bland andra //[[Lus. discolor|88783fd9-aff8-4153-a165-0917608b179b]]//, producerar en lång blomstängel med små men vackra vita och gula blommor. //[[Lus. discolor|88783fd9-aff8-4153-a165-0917608b179b]]// har dessutom en angenäm doft. Det är också den enda arten inom släktet. Det finns dock en variant känd som //Ludisian discolor// var. //dawsoniana//.
Arten växer terrestriskt i varma och fuktiga skogar i Indonesien och Burma.

!Utseende
//[[Lus. discolor|88783fd9-aff8-4153-a165-0917608b179b]]// är en markväxande orkidé med krypande växtsätt. Bladen är brungröna, vackert mönstrade med nerverna som inlägg i orange eller rött. Blommorna som vanligen kommer under hösten eller vintern när det börjar bli lite svalare, är vita med en vriden, klart gul könspelare. De enskilda blommorna är små, bara knappt två cm stora, men de kommer i kluster på en upprätt blomstängel och håller i två till tre veckor och doftar under tiden.

!Skötsel
De växer i den humusrika jorden eller lövkomposten på marken i skuggiga, fuktiga men väldränerade jordar. Odlade i krukor kan de var besvärliga att få att trivas, de skickar snabbt utlöpare ur krukan. Eftersom de växer långt nere på marken i regnskogen föredrar de en ganska skuggig växtplats. Utsätt dem inte för direkt solsken eller alltför starkt ljus. De trivs utomordentligt i terrarier under lysrör. Temperaturen får gärna ligga mellan 24 till 30 grader under dagen och tio grader lägre på natten. Under kortare perioder kan de klar så högt som 38 grader och så lågt som ner till tio grader. Vid höga temperaturer måste luftcirkulation och -fuktighet vara hög för att inte skador ska uppkomma.
Håll dem jämnt fuktiga med en hög luftfuktighet, men sörj för god luftcirkulation för att förhindra uppkomst av mögel och röta.
De behöver en jämn, låg gödning, under tillväxten. Göd med en fjärdedels gödning varannan vecka under våren till tidig höst och en lätt gödning en gång i månaden under höst och vinter. Skölj igenom komposten med rent vatten mellan gödningarna så inte salter byggs upp.
Eftersom de är terrestrisk behöver de en kompost som håller fukten men inte är konstant blöt. Planteringsjord med sand, sphagnum och perlite är utmärkt, men även mycket fin barkkompost fungerar. Det bästa att plantera i är låga, vida krukor eller skålar då de växer ovanpå komposten och gärna brer ut sig.
Håll koll efter sniglar och snäckor som älskar de köttiga stammarna på plantorna.

!Taxonomi
''Underfamilj'': Spiranthoideae
''Tribus'': Cranichideae
''Undertribus'': Goodyerinae

''Typart''
//[[Lus. discolor|88783fd9-aff8-4153-a165-0917608b179b]]// A. Richard (1825)

''Uttal''
loo-DIS-ee-uh

''Synonymer''
__Heterotypic Synonyms:__
//Haemaria// Lindley (1826)
//Myoda// Lindley (1833)
//Dicrophyla// Raf. (1838)

!Rekommenderad läsning
[[Camp Lot A Noise Tropicals|http://www.clanorchids.com/culture/jewel.html]]
[[Lindas Orchid Pages|http://orchidlady.com/pages/orchidGarden/jewelOrchids.html]]


















































































































!Allmänt och utbredning
Arten återfinns i torra låglandsskogar och savannliknande buskmarker i Assam, Thailand, Burma, Laos, Vietnam och Malaysia från havsnivå upp till 1700 meters höjd. De växer framförallt epifytiskt på stammen eller grova grenar på träd men kan även skicka sina utlöpare på rena stenhällen.
Vid pollineringen snäpper läppen upp och fångar för ett kort ögonblick pollinatören som under kampen för att bli fri får med sig pollenklubborna.

!Utseende
Det är en miniatyrart vars pseudobulber kommer med fem till tio cm mellanrum på en vedartad utlöpare. De ovala, gulgröna bulberna blir två eller tre cm långa och en dryg cm tjocka och är fårade längs hela sin längd. Från toppen av varje bulb kommer två avlånga, läderartaded blad som kan bli upptill tio cm långa. Från basen av bulben kommer mellan juni till november en 20 till 30 cm lång blomstängel med en blomställning som i toppen brer ut sig som ett paraply med fem till tio tre cm stora blommor. Blommorna är gula och gröna med röda ränder som öppnas successivt två eller tre i taget under flera månader, högt över bladen. Petalernas spetsar har röda hår längs kanterna.

!Skötsel
I naturen kan de växa i både full sol och i full skugga. I full sol kan blomstängeln bli över 60 cm lång. I odling rekommenderas att plantan hålls varmt, skuggigt och fuktigt, låt den inte torka ut under sommaren. Under vintern kan vattningen minskas och plantan hållas något torrare. Ge den ordentligt luftcirkulation för att undvika svampangrepp. 
Odlas med fördel i korg med en kompost innehållande mycket sphagnum och fin barkkompost eller monterad på bark.

!Synonymer
__Homotypic Synonyms:__
//Phyllorkis blepharistes// Kuntze (1891)
//Cirrhopetalum blepharistes// Hook.f. (1896)
//Tripudianthes blepharistes// Szlach. & Kras (2007)
__Heterotypic Synonyms:__
//Cirrhopetalum longiscapum// Teijsm. & Binn. (1862)
//Phyllorkis longiscapa// Kuntze (1891)
//Bulbophyllum malayanum// J.J.Smith (1912)
//Cirrhopetalum spicatum// Gagnep. (1950)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbblepharistes.htm]]
[[Plantnet|http://bota.plantnet-project.org/orchisasia/genre/Bulbophyllum/Bulbophyllum%20blepharistes/index.html]] - foton




























!Allmänt och utbredning
Det finns <$view field="count"/> arter inom detta föga kända släkte, spridda genom hela det tropiska Amerika. Släktet som helhet är epifyter och växer i fuktiga molnskogar mellan 200 och 2800 meter över havet.
Namnet kommer från grekiskans ''diche'' som betyder "tvåvärd", efter hur bladen är arrangerade i två rader på stammen.

!Utseende
Arterna saknar pseudobulber och har ett monopodialt växtsätt med tätt ordnade blad på en långsmal stam. De stjärnlika blommorna kommer enstaka direkt från stammen mellan bladen. Trots att dessa är små har de oftast en mycket stark doft av choklad eller kakao. De har fyra hårda och vaxliknande polliner. Blommorna pollineras av hanbin av släktet //Euglossine//.

!Skötsel
Många av arterna har ett hängande växtsätt som bäst kommer till sin rätt monterade. Några är dock upprätta och kan odlas i krukor. Majoriteten av arterna växer svalt och behöver ett halvskuggigt läge med hög luftfuktighet, jämn vattning och gödning året om med god luftcirkulation.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Zygopetalinae

''Typart''
//[[Dcha. pendula|e630c29f-88ab-4421-a6e5-e9c82687d3b1]]// Cogniaux (1903)

''Uttal''
dye-KEE-a

''Synonymer''
__Heterotypic Synonyms:__
//Dichaeopsis// Pfitzer (1887)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dichaea]]


















































































































































!Allmänt och utbredning
Den återfinns i mossiga, lägre bergmolnskogar i Sabah, nordvästra Borneo, runt 1600 meters höjd över havet.
Arten är uppkallad efter den bortgångne Toshiro Inamori, en japansk orkidéentusiast och filmskapare. Den är nära besläktad med //[[Paph. sugiyamanum|254041f2-e36e-4b37-b77b-d5d646aec17f]]// men skiljer i flera mindre detaljer. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Barbata.

!Utseende
Det är en liten kompakt art som bildar en liten bladrosett med fyra till fem breda ljusgröna blad, drygt 20 cm långa och sju cm breda, kraftigt marmorerade i mörkgrönt. Under hösten kommer en upptill 25 cm lång blomstängel som bär en ensam blomma. Blomman är åtta cm stor med sepalerna håriga på utsidan, den dorsala sepalen är gulaktig med en klargrön mitt och längsgående lila ådringar. Läppen är mattgul med lila ådringar och med en purpurprickig insida.

!Skötsel
Ge den en placering med måttligt starkt ljus och svala eller intermediära temperaturer. Odla i en öppen, väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphinamorii.htm]] 2015-05-23
[[Orchid Japan|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu57.html]] 2015-05-23




















































!Allmänt och utbredning
Det är en medelstor art från framförallt Mexiko som även påträffas mer sällsynt i Guatemala och Honduras. Den växer mellan 500 och 1500 meters höjd, ofta i fullt ljus som epifyt i kaffeplantager eller betesmarker, på solitära träd eller nära skogskanter. Den är ofta utsatt för full sol och starka vindar med varma dagar och kalla nätter som följd.
//Laelia anceps// är delad i två grupper, //L. anceps// var //anceps// som förekommer på den östra sidan av Mexiko och den mörkare //L. anceps// var //dawsonii// som återfinns på den västra halvan av Mexiko.

!Utseende
De ovala, tillplattade decimeterlånga pseudobulberna bär ett eller mer sällan två mörkt gröna, läderartade blad som kan bli upptill 20 cm långa. Blomstängeln som kan bli mer än en halvmeter lång bär i toppen ett kluster med ett halvdussin doftande blommor som blir tio till tolv cm i diameter. Blommorna som vanligen kommer mellan november och januari är ljust lavendelblå med en intensivt djupröd läpp där mitten är randad i rött och gult.

!Skötsel
Det är en varmväxande och torktålig art som utan problem klarar temperaturer upptill 38 grader bara den får tillräckligt med vatten. Likaväl som den klarar temperaturer ner till nollan utan att ta skada. I subtropiska områden går det utmärkt att odla den monterad på träd utomhus, företrädesvis på ek, björk, palmer, citrus eller liknande. Gran och tall bör dock undvikas i möjligaste mån då de utsöndrar terpentener.
De vill ha en så ljus växtplats som möjligt, den vill ha mellan 15000 och 35000 lux om möjligt. Om det är alltför mörkt uteblir blomningen. Den växer bra utomhus i full sol under sommaren om den får lite skuggning för den starkaste middagssolen. En rödaktig nyans på bladen indikerar att den får tillräckligt med sol.
Vattna och göd regelbundet under tillväxtperioden april till november. Under de varma sommarmånaderna behöver den vattnas två eller tre gånger i veckan. Minska gödning och vattning efter blomningen. Den vill ha en torrare vintervila och vattning en gång i veckan är tillräckligt. Öka vattningen igen på våren när den nya tillväxten börjar visa sig. I naturen är sommaren mycket blöt med kraftiga regn varje kväll. Den är blöt under natten för att snabbt torka ut av morgonens kraftiga vindar och starka solsken.
De frodas i hög luftfuktighet, om det är för torr luft utvecklas inte blomknopparna ordentligt. De har en klibbig substans innanför täckbladen som omger varje enskild knopp som ska underlätta för knoppen att glida fram. Om luften är för torr torkar substansen till ett klister som bokstavligen limmar ihop knoppen som istället vissnar. I sitt naturliga habitat blommar den under en tre månaders period utan regn, men luftfuktigheten är hela tiden hög och ger tillräckligt med fukt.
När blomstängeln börjat utvecklas flytta plantan så lite som möjligt. Även en liten skillnad i ljus, temperatur eller luftcirkulation kan resultera i att knopparna ramlar av.
Odla den monterade eller i grunda krukor eller skålar med en grov, väldränerad kompost som snabbt torkar upp igen efter vattning. Eftersom varje års tillväxt kommer med fem cm mellanrum, klättrar den snabbt ur sin kruka och hänger med rötterna utanför. Den trivs så och behöver oftast inte planteras om utan bara flyttas över i en större kruka med hela den gamla krukan. Den går lätt att föröka med gamla bladlösa bulber, precis som //[[Cymbidium|96a115b4-bf33-4e6d-beb6-529e665f3585]]//.

!Synonymer
__Homotypic Synonyms:__
//Amalias anceps// Hoffmanns. (1842)
//Amalia anceps// Heynh. (1846)
//Cattleya anceps// Beer (1854)
//Bletia anceps// Rchb.f. (1862)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/laelancepsvaranceps.htm]]
[[Santa Barabara Orchid Estate|http://www.sborchid.com/GrowingGuides/culture-Lanc.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Laelia_anceps]]


















































!Allmänt och utbredning
Det asiatiska släktet //Trias// består av <$view field="count"/> arter endemiska för Indien, Myanmar, tidigare Burma, och Thailand som växer under 1500 meters höjd över havet.
Släktet skapades av den berömde brittiske botanisten sir John Lindley 1830 och är nära besläktat med //[[Bulbophyllum|e98d2bd9-4878-4182-acc8-d67b9b46cc1f]]//.
Namnet kommer från grekiskans ''trias'' som refererar till blommans tre sepaler som är arrangerade i en triangel.

!Utseende
Det är är små plantor, bara några cm stora, med relativt stora pseudobulber och läderartade blad. De centimeterstora blommorna kommer ensamma på en kort blomstängel från basen av bulben och har en karaktäristisk, trekantig form med en ljus grundfärg och med eller utan purpurfärgade prickar. Skillnaden mellan detta släkte och //[[Bulbophyllum|e98d2bd9-4878-4182-acc8-d67b9b46cc1f]]// är att //Trias// har en ståndarknapp med två kamrar och en framåtutskjutande förlängning som kan vara cylindriska eller uppdelad i två till tre delar.

!Skötsel
Odlas med fördel i varm halvskugga med god luftcirkulation. Temperaturen bör inte gå under 13 grader och inte över 30.
Håll komposten fuktig men inte blöt under sommaren och tillåt den inte att torka ut. Under vintern kan komposten hållas lite torrare med en reducerad vattning. De odlas vanligen monterade eller i en mix av fin barkkompost och sphagnum.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Podochilaeae
''Undertribus'': Bulbophyllinae

''Typart''
//[[Trias. oblonga|6a78bdb8-9ac1-48e0-a530-f4633154fdb7]]// Lindley (1830)

''Uttal''
tri-AS

''Synonymer''
N/A

!Rekommenderad läsning
[[A love of Orchid|http://www.unamourdorchidee.com/contenu/english/fiches/fiche_trias.html]]

























!Allmänt och utbredning
Det är en nyligen upptäckt terrestrisk art från den indonesiska ön Sulawesi som växer på kalkstensklippor alltid nära rinnande vatten i djupa, skuggiga raviner mellan 700 och 1000 meters höjd. Den upptäcktes av Ayub Parnate som föreslog att den skulle uppkallas till //Paph. ayubii// eller //Paph. parnate// men hans önskan uppfylldes inte.
Arten är uppkallad efter sina extremt stora blad, kanske de största inom släktet. Taxonomiskt tillhör den undersläktet Polyantha sektionen Mastigopetalum.

!Utseende
Arten tillhör de största inom släktet med gräsgröna blad som kan bli 60 cm långa och en decimeter tvärs över. Under våren och tidig sommar blommar den på en upprätt, mer än en halvmeter hög blomstängel som bär upptill sex stycken sex till tio cm stora blommor högt över bladen. Den dorsala sepalen är gröngul med tre till fem längsgående rödbruna ränder mot basen och mörkt purpurfärgad på baksidan. De skruvade petalerna och läppen är gräddgula till gyllengula med röda ränder och fläckar. Den främre delen av läppen har också en anstrykning av rött. Hela blomställningen, knopparna och baksidan av de öppna blommor är mycket hårig.

!Skötsel
Den föredrar att vara fuktig hela tiden men klarar inte alls ackumulering av salter i komposten. Dess naturliga habitat utsätts för konstant regn med de största regnmängderna mellan vår och höst. Ge den en skuggig placering med hög luftfuktighet och intermediära eller varma temperaturer, vintertid inte under 18 grader. Vattna två gånger i veckan med svag gödning varannan gång.
Odla i en väldränerad mix av fin eller medelgrov barkkompost och perlite eller sphagnum, gärna med tillsats av träkol.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphgigantifolium.htm]] 2015-05-08
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_gigantifolium]] 2015-05-08
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/gigantifolium/index.html]] 2015-05-08
[[Dr. Tanaka´s Paph site|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/engigantifolium.html]] 2015-05-08
[[e-Monocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:147095]] 2015-05-08



































































!Allmänt och utbredning
//Phrag. tetzlaffianum// [frag-muh-PEE-dee-um tetz-laff-ee-AY-num] är en terrestrisk art endemisk för Venezuela.
Namnet har den fått för att hedra Norman Leo Tetzlaff, fader till Allan Norman Tetzlaff som var den som tillhandahöll plantan som användes vid beskrivningen. Taxonomiskt tillhör den sektionen Himantopetalum. Troligen är den närmast släkt med //[[Phrag. richteri|7da06543-9390-4510-aac5-44043d566eb5]]//.

!Utseende
Den har en mycket kort stam, helt omsluten av sex stycken långsmala blad i en solfjädersform. De mörkgröna bladen, som kan bli 50 cm långa och är mindre än två cm breda, har en längsgående köl på undersidan. Blomstängeln som kan bli upptill 35 cm lång grenar sig ofta på äldre plantor och kan bära upptill tio blommor, med en till fyra samtidigt öppna, fler på riktigt stora plantor, nerifrån och uppåt. Blommorna kan bli 24 cm mellan spetsarna på petalerna när dessa är helt utsträckta. Drygt hälften så stor på höjden. Den dorsala sepalen är sex cm lång och en och en halv cm bred, med kanten på övre halvan vriden bakåt. Kanten på den dorsala sepalen och petalerna är vita, resten är ljust gulgrön med ränder i rött eller ljust brunt. Läppen är ljust gulgrön. Varje blomma kan hålla i upptill en månad.

!Skötsel
Det är en lätt art att odla om den kan hållas ständigt fuktig. Ge den en skuggig och varm växtplats. Odla i en väldränerad kompostmix med medelgrov bark och mycket sphagnum och perlite.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragtetzlaffianum.htm]] 2015-07-24
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=300]] 2015-07-23
[[e-Monocot|http://cypripedioideae.e-monocot.org/taxonomy/term/846]] 2015-07-23

















!Allmänt och utbredning
Det är en epifytiskt art från Surinam, Ecuador, Peru och Bolivia där den växer i trädtopparna på höga regnskogsträd mellan 200 och 1200 meters höjd. Den upptäcktes ursprungligen längs Tapanahony River i Surinam men har aldrig hittas igen på den platsen. Senare insamlingar i Surinam gjordes nära
Corentyne River. I nära San Rafael i provinsen Chapare i norra Bolivia växter den på gamla citrusträd i våta skogsområden runt 450 m höjd. I Peru har den påträffats i provinserna Huanuco, San Martin och Pasco på träd i fuktiga bergsmolnskogar mellan 600-1200 m.
Den liknar //[[Psychp. papilio|be6f4a2e-81fe-4926-93cc-8c6295b9f919]]// men med mindre blommor med ett annat mönster på läppen och könspelaren har tydliga, borstiga hår.
Arten är uppkallad efter den holländska orkidéodlaren Versteeg. Kromosomtalet är 2n=38.

!Utseende
Pseudobulberna är runda eller ovala, tillplattade från sidorna och oregelbundet skrynkliga. De blir fyra till sex cm stora och bär i toppen ett ensamt, avlångt blad, 15 till 30 cm långt och fyra till nio cm brett. Täckbladen runt bulbernas bas är kortlivade, torra och tunna. Översidan av varje blad har en matt olivgrön färg som kan vara fläckig i svagt blekgrönt om den odlas skuggigt eller i mer iögonfallande purpurrött vid odling i starkare ljus. Undersidan av varje blad är rödlila med fläckar av grönt och med en tydlig köl. Under senvintern och våren kommer från basen av de nyaste bulberna en upp till meterlång blomstängel med sex till tio cm långa internoder. Stängeln är oval vid basen men plattas ut så den får två skarpa kanter. Från stängel kommer tre till fem successivt öppna blommor. Blommorna blir elva cm stora med långa, smala petaler dorsal sepal, sju cm långa och mindre än en cm breda. De är gulgröna med mörkt rödbruna markeringar mot spetsen. Läppen är klargul med mer eller mindre rödbruna markeringar. Under ljusare växtförhållanden kommer blommorna vara mindre, mindre intensivt färgade och tenderar att vara mer tillbakaböjda. Omvänt, om den växer skuggigare bildas plattare, är mer intensivt färgade blommor.

!Skötsel
Under hela året ligger dagstemperaturen runt 26 till 28 grader och sjunker under nätterna till 14 till 16. Det är de svalaste temperaturerna som plantor av arten bör utsättas för. På grund av sitt stort utbredningsområde bör plantorna kunna anpassa sig till ett par tre grader varmare temperaturer.
Ge den en ljus växtplats utan direkt sol, 18000 till 27000 lux. De kan tolerera ännu mer ljus om luftfuktigheten hålls hög och luftcirkulationen är tillräcklig.
I naturen utsätts de för kraftiga regn större delen av året. Odlade plantor bör vattnas ofta men rötterna måste snabbt torka upp igen efter vattning, och komposten får inte vara blöt för länge. Minska vattning på vintern och låt kruka torka upp lätt mellan vattningarna. Om den övervattnas när tillgången på ljus minskas kan den lätt angripas av svamp och mögel. Ge svag gödning varje vecka, halv till en fjärdedel av rekommenderade dosen, under tillväxten.
De kan odlas monterade om luftfuktigheten är hög och om den kan vattnas minst en gång om dagen under den varma årstiden. Annars rekommenderas grunda skålar eller korgar med en väldränerad mix av medelgrov barkkompost och inte alltför mycket hackad sphagnum eller perlite.

!Synonymer
__Homotypic Synonyms:__
//Oncidium versteegianum// Pulle (1909)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/psyversteegiana.htm]] 2015-11-04
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS1281.html]] 2015-11-04
[[Orchids WIki|http://orchids.wikia.com/wiki/Psychopsis_versteegiana]] 2015-11-04
[[Smithsonian.com|http://www.smithsonianmag.com/science-nature/nine-ways-to-lure-a-lover-orchid-style-21933475/]] 2015-11-04


!Allmänt och utbredning
//Gur. bowringiana// kommer från Guatemala och Belize i Centralamerika. Arten flyttades nyligen från cattleyasläktet. Det är en enastående adaptiv växt, den kan påträffas som litofyt i steniga raviner, växande på bara stenen i full sol eller påträffas terrestriskt på kvartsand längs strömmande floder och som epifyt på stora träd. Den växer från 100 till mer än 1000 meter över havet.
//Gur. bowringiana// är också kända för sin tolerans mot skador från regnskogens alla djur. Under regnsäsongen, när plantorna aktivt tillväxer är deras saftiga unga skott en favoritföda för vissa av de vilda djuren. Samlare klagar ofta att plantorna är så förstörda att de inte är värda att samla in. Ändå fortsätter de att överleva, tillväxa och blomstra.

!Utseende
Pseudobulberna kan lätt bli 25 till 30 cm långa, och med lite skicklighet hos odlaren uppemot en halv meter i fångenskap. Arten skiljer sig från cattleyor och de övriga i det nya släktet i och med den ansvällning vid basen av pseudobulben från vilken rötterna och det nya skottet kommer.
Växten blommar utan viloperiod på hösten från september till oktober, och en välväxt planta kan ge en blomklase med 15 till 25 blommor per stängel. Med två eller tre stänglar kan en enda planta ge 50, 60 blommor, och en planta finns dokumenterad med nio stänglar blommade med 195 blommor! Efter blomningen behövs en kort vintervila från vattning och gödning.
Det finns ingen äkta //alba// eller //semialba// variant av arten och den saknar läppmönstren som karaktäriserar de storblommande cattleyorna, utan blomman är ljust rosa med en mörkare läpp. En variant är mörkt violett till purpurfärgad, och vissa kloner av //Gur. bowringiana// har en djupare blå färg än vad som finns i resten av släktet eller hos de närbesläktade cattleyorna.

!Skötsel
Liksom de flesta av sina nära släktingar inom cattleyasläktet drar //Gur. bowringiana// nytta av mycket solljus, ordentlig luftväxling, och när den tillväxer, ett överflöd av vatten.
Många föredrar att odla arten i en mycket liten kruka för att kunna vattna oftare utan att komposten blir blöt utan torkar upp snabbt. Detta innebär att det bara finns plats för ett års tillväxt i krukan istället för de vanliga två eller tre. Växten kan omplanteras när som helst under året, men den bästa tiden är när nya rötter börjar komma fram från den uppsvällda basen av pseudobulben. Vid omplantering är det viktigt att plantera växten med botten av den uppsvällda basen i nivå med komposten, och inte under den. Risken finns annars att det nya skottet ruttnar när det kommer under senvåren, maj eller juni.

!Synonymer
__Homotypic Synonyms__
//Cattleya bowringiana// O´Brien (1885)
//Cattleya skinneri// var. //bowringiana// Rchb.f. (1892)
__Heterotypic Synonyms__
//Cattleya autumnalis// O´Brien (1888)

!Rekommenderad läsning
[[Chadwick and Sons Orchids|http://www.chadwickorchids.com/Cattleya/bowringiana.htm]]
[[Vivi´s Corner|http://viviorchids.com/orcnr-43.html]]














































!Allmänt och utbredning
Denna miniatyrart växer epifytiskt i Ecuadors fuktiga bergsmolnskogar mellan 730 och 1960 meters höjd.
Den har fått sitt namn av Luer för att hedra den nutida [[amerikanske botaniker Calaway H. Dodson|http://en.wikipedia.org/wiki/Calaway_H._Dodson]] som verkade i de tropiska delarna av Sydamerika under en större del av seklet och var den som upptäckte arten nära Río Blanco vid Baños i provinsen Pastaza, östra Ecuador, vid 1600 meters höjd den 8 oktober 1961.

!Utseende
Plantan har ett hängande växtsätt och saknar pseudobulber utan de tumnagelstora bladen kommer ett och ett på en kort bladstam direkt från det krypande rhizomet. Bladen är elliptiskt ovala i en grågrön färg översållade med purpurfärgade prickar och vårtliknande fläckar. Olika kloner kan har mer eller mindre prickar, men det är framförallt för bladens skull den odlas. De blygsamma blommorna blir bara fem mm stora men kan komma från basen av bladen när som helst under året. De kommer en och en på en väldigt kort blomstängel, vid basen omslutna av ett torrt, rödbrunt stödblad.

!Skötsel
Den föredrar en sval till intermediär temperatur mellan 13 och 29 grader. Ge den en halvskuggig eller ljus växtplats utan direkt sol, ungefär 15000 till 27000 lux, och hög luftfuktighet. Håll den fuktig med bara lätta upptorkningar mellan varje vattning, varannan till var tredje dag.
Bästa sättet att odla den är monterad på bark eller kork så den kan få klättra fritt och utan att de tunna rötterna hålls för blöta.

!Synonymer
__Homotypic Synonyms:__
//Apoda-prorepentia dodsonii// Luer (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurdodsonii.htm]]






























































































































































































































!Allmänt och utbredning
Den har blivit funnen i Thailand, Malaysia, Borneo, Java, Sumatra, Sulawesi, Nya Guinea och Filippinerna där den växer terrestrisk, svalt till varmt från havsnivå till ungefär 2000 meters höjd.

!Utseende
Den har ovalt långsmala pseudobulber som bär två avlånga, rundade blad. Den blommar under hösten och vintern på en lång, smal, upprätt blomstängel som mest liknar en flaskborste. Stängeln är översållad med hundratals mycket små blommor i vitt med gul läpp.

!Skötsel
Den vill ha en skuggig växtplats med en temperatur som svalast 15 grader och inte varmare än 30 grader. Håll plantan fuktig, med tre till fem vattningar per vecka. Låt den bara torka upp lätt mellan vattningarna.

!Synonymer
__Homotypic Synonyms:__
//Malaxis parviflora// Blume (1825)
//Leptorkis parviflora// Kuntze (1891)
//Cestichis parviflora// M.A.Clem. & D.L.Jones (2005)
//Stichorkis parviflora// Marg., Szlach. & Kulak (2008)
__Heterotypic Synonyms:__
//Liparis flaccida// Rchb.f. (1876)
//Leptorkis flaccida// Kuntze (1891)
//Liparis dissitiflora// Ridley (1926)
//Liparis tembelingensis// Carr (1929)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lipparviflora.htm]]

!Allmänt och utbredning
//Den. amethystoglossum// kommer från den tempererade delen av bergsmolnskogarna i Luzon i Filippinerna, där den växer litofytiskt på mossiga kalkstensklippor runt 1400 meters höjd.
Artnamnet kommer av den ametistfärgade läppen i en i övrigt rent vit blomma.

!Utseende
Det är en ganska storväxande art med långa, smala, käpplika pseudobulberna med längsgående ribbor. Bulberna kan vara hängande eller upprätta och kan bli 60 till 90 cm långa. Vid noderna längs bulberna kommer ovala, ljusgröna blad som blir tio cm långa. Till skillnad från de flesta andra arter inom dendrobiumsläktet fäller de föregående årets bulber sina blad under hösten. Under vintern, vanligen i januari efter att bladen fällts, kommer från noderna i toppen av gamla bladlösa, inte de nya, bulberna, de upptill 15 cm långa, hängande blomstänglarna. Varje stängel kan bära 15 till 20 doftande, tre cm stora blommor i rent vitt med en enastående intensivt purpurfärgad läpp. Gamla bladlösa bulber kan fortsätta att producera blomstänglar under flera år, så det är viktigt att inte ta bort dem innan de är helt torra och döda.

!Skötsel
Den föredrar lite svalare temperaturer, upptill 25 grader under dagen sommartid och runt tolv under de kallaste nätterna. Den vill ha svalare temperaturer under två månader på vinterna. I sitt naturliga habitat kan temperaturen gå ner till sex grader under den svalaste säsongen. Tillsammans med en hög luftfuktighet ger det mycket dimma och dagg som håller plantan fuktig under torrperioden på vintern.
Den vill ha massor med vatten under juli och augusti, vattning varje dag, därefter under oktober till november minskas vattningen sakta då den behöver mycket lite vatten under två till fyra månader vintertid. Ge den en duschning då och då mellan vattningarna så att den inte stå torr i långa perioder, men den bör få torka ut något mellan vattningarna. En eller två vattningar i månaden räcker oftast. När knopparna på blomstängeln börjar synas eller när den nya tillväxten börjar synas under januari till mars kan vattningsfrekvensen och temperaturen ökas igen. Om de får för mycket vatten under vintervilan bildar den lätt keikis istället för blomstänglar.
Ge den en ljus halvskugga utan direkt sol under sommaren, annars bränns lätt bladen. Under vintervilan behöver den stå så ljust som möjligt.
De kan odlas monterade eller i små korgar eller krukor med en väldränerad medelgrov mix av barkkompost och sphagnum. Rötterna hos plantan tycker inte om att störas så plantera inte om för ofta, det kan ta ett tag innan den slutar tjura igen efter en omplantering.

!Synonymer
__Homotypic Synonyms:__
//Callista amethystoglossa// Kuntze (1891)
//Pedilonum amethystoglossum// M.A.Clements (2003)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denamethystoglossum.htm]]
[[BackyardGardener|http://www.backyardgardener.com/plantname/pda_7585.html]]
[[Species Specific|http://www.species-specific.com/view-orchid-species-information.php?id=20]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dendrobium_amethystoglossum]]













































































!Allmänt och utbredning
Det är en sällsynt art med mycket begränsat utbredningsområde som växer terrestriskt i  lövkompost i täta skogar i provinserna Agusan del Norte, Agusan del Sur och Surigao del Sur på ön Mindanao i Filippinerna mellan 460 och 500 meters höjd över havet. Arten är känd från endast fem lokaler och populationen beräknas ha minskat med 70% under de tre senaste generationerna, mycket på grund av skogsavverkning och annan mänsklig påverkan.
Namnet kommer efter den amerikanske odlaren Ray Rands. Den liknar //[[Paph philippinense|05a1b2dd-84e3-436f-8eb4-e745b57d68de]]// men utan de långa petalerna. Taxonomiskt tillhör den undersläkte Polyantha sektionen Mastigopetalum. Kromosomtalet är 2=26.

!Utseende
Det är en medelstor art med långsmala, tolv till 30 cm långa och sex cm breda, helgröna blad. Under försommaren bildar den en upprätt, upptill 40 cm lång blomstängel med tre till tio stycken sju cm stora blommor. Blommorna har den unika karaktären med utstående "öron" på läppen. Sepaler och petaler är vita eller ljust gula med mörkt vinröda ränder. Läppen är gulgrön med mörkare nerver.

!Skötsel
I dess naturliga utbredningsområde utsätts den för måttlig nederbörd under vintern och våren, och kraftiga regn under sommaren genom hela hösten. Temperaturen varierar inte mycket utan ligger runt 25 grader större delen av året.
Den är inte vanlig i odling och //Paph. randsii// är känd för att tillväxa långsamt så det behövs en rejäl portion tålamod för att få den att blomma. Den bör odlas i måttlig till starkt ljus och intermediära till varma temperaturer, inte under 20 grader. Plantera i en väldränerad mix av barkkompost och perlit eller vitmossa. Vattna regelbundet ungefär var fjärde till femte dag. För att inducera blomningen behövs mycket ljus under tio till tolv timmar per dag under vintern och våren.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphrandsii.htm]] 2015-08-14
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_randsii]] 2015-08-14
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/polyantha/randsii/index.html]] 2015-08-14















!Allmänt och utbredning
//Paph. canhii// upptäcktes så sent som 2009 på en enda lokal i nordvästra Vietnam nära gränsen mot Laos. Denna lilla population utarmades svårt på grund av kommersiell insamling och är redan nu nästan utrotad. Arten växer vanligtvis nära bergstoppar på höjder 1600 till 1800 meter över havet, litofytiskt på skuggiga lodräta klippor eller på smala mossiga klipphyllor med rötterna tätt pressade mot den nakna kalksten utan någon jordmån alls. Två andra  arter inom släktet, //[[Paph. dianthum|eea31847-9fde-4949-9e50-feffc443914c]]// och //[[Paph. concolor|e52e6d13-4a32-4f18-b6aa-29ff7f43bb6c]]//, förekommer ofta i samma miljö.
//Paph. canhii// beskrevs baserad på några få plantor som upptäcktes 2009 i Vietnams avlägsna bergstrakter av den lokale ortsbon H’Mong som förde dessa plantor till kontoret för Natural Resources Governance, CARE International i Vietnam. På kontoret togs dessa plantor emot av tjänstemannen Mr Chu Xuan Canh, som arten är uppkallad efter. Han behöll dem för vetenskapliga studier och fick dem i blom 2010. Förstudien avslöjade unika karaktärer och en mycket isolerad taxonomisk ställning, som resulterade i beskrivningen av en ny art och dess helt egna undersläkte Megastaminodium.

!Utseende
Ovansidan av bladen är marmorerade i ljust och mörkt grönt, med en rödspräcklig undersida. Under våren kommer en blomstängel som bär en ensam blomma.

!Skötsel
Plantera bör odlas under starkt ljus och intermediära temperaturer. Plantera i en väldränerad kompostmix med medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning behövs en period med lägre temperatur och minskad vattning under vintern.

!Synonymer
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_canhii]]

;Leonid V. Averyanov , Khang Nguyen Sinh, Tien Hiep Nguyen, The Van Pham, Shengvilai Lorphengsy, 2014
:Paphiopedilum Canhii //In Laos Phou Phachao Mountain – Mountain Of //Paphiopedilum Canhii
:Orchid Digest, April, May, June 2014
:http://www.rufford.org/files/Orchid%20Digest,%20April,%20May,%20June%202014.pdf




































































!Allmänt och utbredning
Den terrestrisk arten //Clem. smilacifolium// är den enda inom släktet och endemisk för mörka, fuktiga bergsregnskogar på ön Nya Kaledonien från 150 till 1200 m över havet.
Epitetet ''smilacifolium'' jämför bladen med de av släktet //[[Smilax|https://sv.wikipedia.org/wiki/Sarsaparill]]//, sarsaparill. De stora och vingförsedda fröna hos //[[Clem. smilacifolium|375d2b53-8a77-492f-b271-4b8781464743]]// är unika bland orkidéerna. Pollinatören är okänd, men storleken och komplexiteten hos blommans läpp tyder på att blommorna pollineras av bin som får kämpa för att fly.

!Utseende
Det är en klättrande ranka som vuxen individ, liksom arterna i //[[Vanilla|ab8b1737-9317-40c6-bdae-c80f268057c9]]//, men den börjar livet som en kort och upprätt planta. De tjocka rötterna är långa, spröda och kommer från endast från basen av skottet. Stammen kan bli upptill åtta meter lång och träartad med utdragna noder på äldre stamdelar. Bladen hos vuxna individer kan bli mellan tio och 20 cm långa och upptill tio cm breda, mörkt gröna, läderartade, med tydliga nerver och kommer enstaka vid varje nod längs stammen. Liksom hos många klätterväxter producerar unga individer mindre, mer elliptiska blad och kortare internoder på kompakta späda plantor än hos vuxna. De stora individerna klättrar upp i trädkronorna med hjälp av slingrande stammar och till skillnad från //[[Vanilla|ab8b1737-9317-40c6-bdae-c80f268057c9]]// klättrar de utan hjälp av rankor eller luftrötter. Vuxna och unga plantor påträffas vanligen tillsammans men bildar aldrig stora bestånd. De blommar i full sol i trädkronorna endast efter att ha uppnått en avsevärd längd, men blommorna har aldrig fotograferad. De fyra cm stora, mörkröda blommorna kommer i en klase med tre till 17 blommor från slutet av december till slutet av februari. Sepalerna är elliptiska med mittsepalen något längre än de laterala sepalerna. Petalerna är ovala och läppen fri och treflikad.

!Skötsel
Arten odlas troligen mycket lite, men behöver en varm och skuggig växtplats under sina första år. När den väl vuxit till sig efter många år, kommer den kräva maximalt med ljus för att blomma. Ge jämn vattning hela året och låt den inte torka ut.

!Synonymer
__Homotypic Synonyms:__
//Epistephium smilacifolium// Rchb.f. (1876)

!Rekommenderad läsning
[[Wikipedia|https://de.wikipedia.org/wiki/Clematepistephium_smilacifolium]] tyska












































































































!Allmänt och utbredning
//Ptst. coccina// är en terrestrisk orkidéart endemisk för Australien, där den växer bland gräs, buskar och klippor i fuktiga, glesa skogar från New South Wales till Victoria mellan 700 och 1500 meters höjd.

!Utseende
Denna australiensiska markorkidé har pärlliknande underjordiska bulber stora som en ärta. Bladen skjuter fram i en mörkgrön rosett tätt intill marken. Rosetten blir ungefär så stor som ett mynt.
Under sommaren och tidig höst skjuter från rosetten en upptill 20 cm lång, smal stängel upp. På stängeln sitter en ensam, märkligt formad blomma som är färgad i grönt och rött.
Plantorna förökar sig gärna genom att skjuta upp nya rosetter vid sidan av de gamla och på ett par år kan en kruka vara en härlig miniinstallation.

!Skötsel
Odlas i grunda krukor med en porös lövkompost med stor andel perlite och sand, ljust eller i ljus halvskugga.

!Synonymer
__Homotypic Synonyms:__
//Diplodium coccinum// D.L.Jones & M.A.Clem. (2002)

!Rekommenderad läsning
[[Neovita|http://www.neovita.com/orkideer/no.cgi?vara=pterostylis_coccina&sida=&varugrupp=pterostylis&avdelning=tradgardsorkideer_sommar&huvudavdelning=butik]]
[[Wikipedia|http://commons.wikimedia.org/wiki/Pterostylis_coccinea]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/ptercoccina.htm]]




!Allmänt och utbredning
Det är en varmväxande litofytisk art som upptäcktes så nyligen som 1986 i öppna, torra skogar på branta bergssidor och kalkstenklippor i de kinesiska provinserna Yunnan, Guangxi, Guangdong och norra Vietnam mellan 300 och 750 meters höjd.
Namnet har den fått efter orkidéentusiasten Emerson 'Doc' Charles från Kalifornien som blommade typplantan i maj 1986. Taxonomiskt tillhör den undersläktet Parvisepalum sektionen Emersonianum.

!Utseende
Den får fyra till sju glänsande helgröna blad som blir upptill 25 cm långa och tre till fem cm breda. Mer sällan förekommer plantor med blad med svaga marmoreringar i ljust och mörkt grönt. Undersidan är ljusgrön, ibland med rödlila prickar mot basen, och längs med hela bladet finns en tydlig köl. Under senvåren kommer en drygt 15 cm lång blomstängel med en ensam, svagt sötdoftande, tio cm stor blomma. Sepalerna och petalerna är vita eller ljust rosa, ibland med stänk av lila, och läppen är ljus gul med rödlila prickar på insidan. Hela blomman fortsätter växa under de dryga två veckor den blommar.

!Skötsel
Det är en långsamt växande art men när den väl är tillräckligt stor, ganska lätt att få i blom. De behöver mycket vatten och sommartid kan de gärna hållas fuktigare än de flesta andra arter inom släktet. November till mars är de torraste månaderna med bara dimma och lätta regn, medan maj till augusti är de våtaste med ständiga kraftiga regn. För att inducera blomningen behövs en period av tre till fyra veckor under vintern med minska vattning och en temperatur under 15 grader. Under tiden försök hålla luftfuktigheten över 60%.
Ge dem en halvskuggig placering, 10000 till 20000 lux, och intermediära eller varma temperaturer, under vintern inte lägre än sju grader nattetid.
Odla i en öppen blandning av medelgrov barkkompost, perlit och gärna en andel kol eller kokosskal.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum huonglanae// N.T.Tich (1998) nom. inval.
//Paphiopedilum emersonii// f. //luteum// Braem (2001)
//Paphiopedilum emersonii// f. //album// O.Gruss & Petchl. (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphemersoni.htm]] 2015-04-29
[[Slipperorchid.info|http://slipperorchids.info/paphdatasheets/parvisepalum/emersonii/index.html]] 2015-04-29
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_emersonii]] 2015-04-29
[[Paph.net|http://www.paphs.net/media/Paphs/emersonii.htm]] 2015-04-29
[[Flora of China|http://efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092416]] 2015-04-29
[[Wikipedia|http://en.wikipedia.org/wiki/Paphiopedilum_emersonii]] 2015-04-29
[[Argus Orchids|http://www.argusorchids.net/images/photopages/p_emersoniiphotopage.htm]] 2015-04-29




!Allmänt och utbredning
Arten återfinns genom hela den norra delen av Sydamerika och den karibiska övärlden. Den växer som epifyt i de täta, fuktiga tropiska skogarna från 200 till 2000 meters höjd över havet.

!Utseende
Från toppen av pseudobulberna kommer ett ensamt, elliptiskt blad. Från en fullväxt bulb kommer en kort blomstängeln som blir mellan två och fem cm lång. Det är en kompakt planta som kan producera massor av blomstänglar som var och en bär en ensam blomma, knappt tre cm tvärs över.
//Mlca. rufescens// är välkänd för sina klargula blommor och underbara vaniljdoft. Blomman är tre till fyra cm stor med brungröna sepaler och petaler, och en läpp översållad av oxblodsfärgade märken. Den kan uppvisa en stor variabilitet i blomfärg och storlek.
En speciellt trevlig egenskap hos växten är att den kan blomma när som helst under året. På grund av sin anspråkslösa storlek är den utmärkt för fönsterbrädan.

!Skötsel
Plantan behöver ordentlig luftfuktighet och en jämn fuktighet för att växa ordentligt. Den behöver också en sval till varm placering i ljus skugga.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria rufescens// Lindl. (1836)
__Heterotypic Synonyms:__
//Maxillaria fuscata// Lindl. (1836)
//Maxillaria rugosa// Scheidw. (1843)
//Maxillaria articulata// Klotzsch (1853)
//Maxillaria vanillodora// A.Rich. (1857) pro syn.
//Maxillaria rufescens// var. //flavida// Rchb.f. (1869)
//Maxillaria rufescens// var. //florida// Rchb.f. (1869)
//Maxillaria abelei// Schlechter (1921)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxrufescens.htm]]
[[Thees Orchids|http://www.thee.ch/Seiten/orchids/Maxillaria%20rufescenshabitus.jpg]] & [[här|http://www.thee.ch/Seiten/orchids/Maxillaria%20rufescens.jpg]] bilder
[[Orchidorama|http://orchidorama.free.fr/03-d%E9cembre/Maxillaria%20rufescens03.jpg]] bild






























!Allmänt och utbredning
//Dla. caesariata// är en svalväxande miniatyrepifyt från de fuktiga molnskogarna på de östra sluttningarna av Anderna i provinsen Morona-Santiago i södra Ecuador mellan 1700 och 1800 meters höjd.
Artnamnet kommer från latinets ''caesariatus'' som betyder "täckt av hår" och anspelar på den tjocka matta av hår som täcker större delen av plantan.

!Utseende
Blad, stänglar och blommor är alla helt täckta av korta, vita hår. Den saknar pseudobulber utan har ett underjordiskt rhizom från vilket de korta, hängande bladstänglarna och de upptill 15 cm långa bladen kommer. De tre cm stora blommorna kommer under våren på en tre mm lång stängel från övergången mellan bladstängel och bladskivan. Varje blomstängel bär endast en blomma, men varje blad kan bära en ny blomma varje vår under många år. Blomman har ett mycket säreget utseende, päronformad med den dorsala sepalen som en långsmal, trekantig flik över läppen. Hela blomman är tätt beströdd med vita hår på en i övrigt mörkröd botten.

!Skötsel
Det är en långsamt växande planta och mycket känslig för uppbyggnad av salter i komposten. Den anledningen plus dess växtsätt gör att den med fördel kan odlas monterad. Den verkar inte vara speciellt krävande vad gäller temperaturen om den kan få en ljus skugga och hållas ständigt fuktig men inte blöt.

!Synonymer
N/A

!Rekommenderad läsning
[[OrchidKarma|http://www.orchidkarma.com/dresslerella-caesariata/]]
[[Orchids in Bloom|http://orchidsinbloom-ron.blogspot.se/2013/03/dresslerella-caesariata.html]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dresscaeriata.htm]]










































































































!Allmänt och utbredning
Den kommer från norra och östra delarna av Nya Guinea och öarna Garaina, Kui och Kar Kar där den växer terrestriskt i sprickor på kalkstensklippor eller sura vulkaniska bergarter mellan 180 till 1200 meters höjd. Den är känd från fyra lokaler i ett utbredningsområde runt 100 km^^2^^.
Arten är uppkallad efter den intensivt violetta färgen på petalerna. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Blepharopetalum. Kromosomtalet är 2n=38.

!Utseende
Den bildar en rosett med fyra till sex avlånga, mörkgröna blad mönstrade med ljust grågrönt, åtta till 22 cm långa och två till fyra cm breda. Under vintern och våren kommer en upptill 30 cm lång blomstängel som bär en ensam blomma. Den sex till åtta cm stora blomman har en vit dorsal sepal med mörkgröna ränder. Petalerna övervägande violetta till lilabrun med ett vitt "penseldrag" vitt längs nederkanten mot basen. Läppen är grön med mörkare ådring.

!Skötsel
Området är alltid vått med täta duggregn under sommar som är den minst blöta perioden och kraftiga regn på vintern. Ge den en växtplats med varm temperatur, inte under 16 grader vintertid, och mycket ljus utan direkt sol. Daglängden varierar endast 30 minuter mellan sommar och vinter så årstiderna sätts av monsunens. Planterar om regelbundet innan komposten börjar brytas ner, gärna varje år, den tål inte uppbyggnad av salter. Använd en väldränerad, helst svagt sur, mix av medelgrov barkkompost och sphagnum.
Den är svår att få att sätta flera skott utan den brukar blomma, ett nytt skott kommer samtidigt som det äldsta dör inom kort. Den är känslig för vattenkvaliteten och föredrar regnvatten eller R/O-vatten. Gödningen bör innehålla kalcium och magnesium. För att inducera blomningen behövs en kort period under höst och vår med minskad vattning.

!Synonymer
__Homotypic Synonyms:__
//Cordula violascens// Rolfe (1912)
__Heterotypic Synonyms:__
//Paphiopedilum violascens// var. //gautierense// J.J.Smith (1915)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphviolascens.htm]] 2015-09-16
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/violascens/index.html]] 2015-09-16
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_violascens]] 2015-09-16













































































































































































!Allmänt och utbredning
Denna sympodiala epifyt växer från havsnivå upptill 300 meter över havet i varma låglandsskogar med en lång regnperiod och en kort torrperiod. Dess naturliga habitat sträcker sig från Brasilien, Colombia, Ecuador, Venezuela, Trinidad och Tobago.
//Ctsm. pileatum// var fram till 1921 Venezuelas nationalblomma, därefter //[[C. mossiae|2c5e9ffb-a795-45bc-be2c-90b9664f126f]]//. Växten producerar antingen han- eller honblommor, inte både och som hos nästan alla andra orkidér.
Det latinska namnet kommer från adjektivet ''pileatus'' som betyder "med huva" och anspelar på huvan över den breda läppen bildad av de domsals sepalen och petalen.

!Utseende
Det är en imponerande planta även när den inte blommar. De stora, toppiga pseudobulber med flera segment kan bli så stora som 16 cm. Bulberna är omslutna av flera bladbärande täckblad som kan bli uppåt 40 cm långa. //Ctsm. pileatum// får upptill 30 cm långa blomstänglar med fyra till tio blommor som blir åtta cm i diameter. Dess stora blommor kommer under sommaren och hösten och håller bara ett par dagar. Petaler och sepaler hos hanblommorna är vita, en stor rundad läpp vaxartat gul med den mörkgul fläck vid basen. Honblommorna är ljusare i blekt gulgröna nyanser.

!Skötsel
//Ctsm. pileatum// är en lövfällande låglandsepifyt anpassad till varma, fuktiga regnskogar med bara en kort vinterperiod. Det är en av få arter inom släktet som inte nödvändigtvis behöver en vintervila. Temperaturen varierar från som högst 30 grader till som minst 15 och med en luftfuktigheten som är hög på natten även under torrperioden.
Odla i kruka eller korg av lagom storlek, de bör inte planteras i för stort kärl. Använd en rik kompost som håller fukten utan att vara blöt eller ren sphagnum med en toppdressing av långtidsverkande gödning. Om luftfuktigheten är låg brukar plastkrukor hålla fukten bättre. 
Under tillväxtperioden bör den få så mycket vatten, värme, luftfuktighet och gödning som möjligt så länge inte bladen uppvisar några skador. De behöver mycket gödning och målet är att producera de största möjliga bulberna fram till hösten. Efter blomningen och när bladen har fallit, bör plantorna förvaras torrt med hög luftfuktighet och varma temperaturer tills nyligen de nyutvecklade bulberna har ett par cm långa rötter. Detta tidsintervall kan vara ganska kort och framgångsrika odlare ger en vintervila endast om växtens utseende tyder på ett behov av dvala.
Efter den torra viloperioden kan plantan planteras om, och delas för att initiera nya plantor. Under vintertiden kan växten hållas torr fram till våren.

!Synonymer
__Heterotypic Synonyms:__
//Catasetum bungerothii// N.E.Br. (1886)
//Catasetum bungerothii// var. //pottsianum// L.Linden & Rodigas (1887)
//Catasetum bungerothii// var. //album// Linden & Rodigas (1888)
//Catasetum bungerothii// var. //randii// Rodigas (1890)
//Catasetum bungerothii// var. //aurantiacum// Cogn. (1894)
//Catasetum bungerothii// var. //lindenii// Gower (1894)
//Catasetum bungerothii// var. //regale// Gower (1894)
//Catasetum imperiale// L.Linden & Cogn. (1895)
//Catasetum x splendens// var. //imperiale// Rolfe (1895)
//Catasetum bungerothii// var. //imperiale// Cogn. (1897)
//Catasetum pileatum// var. //album// Hoehne (1942)
//Catasetum pileatum// var. //imperiale// Cogn. (1942)
//Catasetum pileatum// var. //lindenii// Hoehne (1942)
//Catasetum pileatum// var. //regale// Hoehne (1942)

!Rekommenderad läsning
[[OrchideSpecies|http://www.orchidspecies.com/catpileatum.htm]]
[[Orchid Hunter|http://www.pbs.org/wgbh/nova/Orchids/gall_04.html]]
[[Orchids Online|http://www.speciesorchids.com/CatasetumPileatum.html]]
[[American Orchid Society|http://www.aos.com/Default.aspx?id=154]]































































































!Allmänt och utbredning
Det är ett släkte med bara en enda känd, terrestrisk art, //[[Clem. smilacifolium|375d2b53-8a77-492f-b271-4b8781464743]]//, endemisk för mörka, fuktiga bergsregnskogar på ön Nya Kaledonien från 150 till 1200 m över havet.
Namnet kommer från grekiskans ''clem'' för "vinstock" efter dess växtsätt och ''epistephium'', släktet som den tidigare tillhörde men som skiljer sig från //[[Clem. smilacifolium|375d2b53-8a77-492f-b271-4b8781464743]]// genom att bladen sakna hypodermis. De stora och vingförsedda fröna hos //[[Clem. smilacifolium|375d2b53-8a77-492f-b271-4b8781464743]]// är unika bland orkidéerna. Pollinatören är okänd, men storleken och komplexiteten hos blommans läpp tyder på att blommorna pollineras av bin som får kämpa för att fly.

!Utseende
Det är en klättrande ranka som vuxen individ, liksom arterna i //[[Vanilla|ab8b1737-9317-40c6-bdae-c80f268057c9]]//, men den börjar livet som en kort och upprätt planta. De tjocka rötterna är långa, spröda och kommer från endast från basen av skottet. Stammen kan bli upptill åtta meter lång och träartad med utdragna noder på äldre stamdelar. Bladen hos vuxna individer kan bli mellan tio och 20 cm långa och upptill tio cm breda, mörkt gröna, läderartade, med tydliga nerver och kommer enstaka vid varje nod längs stammen. Liksom hos många klätterväxter producerar unga individer mindre, mer elliptiska blad och kortare internoder på kompakta späda plantor än hos vuxna. De stora individerna klättrar upp i trädkronorna med hjälp av slingrande stammar och till skillnad från //[[Vanilla|ab8b1737-9317-40c6-bdae-c80f268057c9]]// klättrar de utan hjälp av rankor eller luftrötter. Vuxna och unga plantor påträffas vanligen tillsammans men bildar aldrig stora bestånd. De blommar i full sol i trädkronorna endast efter att ha uppnått en avsevärd längd, men blommorna har aldrig fotograferad. De fyra cm stora, mörkröda blommorna kommer i en klase med tre till 17 blommor från slutet av december till slutet av februari. Sepalerna är elliptiska med mittsepalen något längre än de laterala sepalerna. Petalerna är ovala och läppen fri och treflikad.

!Skötsel
Arten odlas troligen mycket lite, men behöver en varm och skuggig växtplats under sina första år. När den väl vuxit till sig efter många år, kommer den kräva maximalt med ljus för att blomma. Ge jämn vattning hela året och låt den inte torka ut.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Clem. smilacifolium|375d2b53-8a77-492f-b271-4b8781464743]]// Nicolas Hallé (1977)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning
[[eMonocot|http://families.e-monocot.org/classification/clematepistephium]] 2015-12-18

















!Allmänt och utbredning
//Paph. barbatum// [paf-ee-oh-PED-ih-lum bar-BAY-tum] återfinns på sandiga marker eller mossklädda granitklippor i fuktiga dalar på Malaysias och Thailands övärldar mellan 480 och 1300 meters höjd.
//Paph. barbatum// är kanske den vanligaste paphiopedilumarten som odlas på låglandet i Malaysia och Singapore.
Namnet kommer från latinets ''barba'' som betyder "skägg" och anspelar på petalernas håriga kanter.
Kromosomtalet är 2n=38.

!Utseende
Det är en medelstor terrestrisk planta med fem till åtta stycken, upptill 15 cm långa och tre till fem cm breda blad. Bladen är tunna och avlångt elliptiska, mönstrade i gröna nyanser. Under sommar och vinter kommer en upptill 25 cm lång blomstängel som bär en eller, mer sällan, två stycken åtta cm stora blommor. Läppen är mörkt purpur vid spetsen som ljusnar mot basen. Petalerna är grönvita med purpurfärgade nerver. Längs kanterna sitter små, fina hår och svarta vårtor. Vanligtvis håller blommorna fem till sju veckor.

!Skötsel
I dess naturliga habitat är januari och februari torra månader medan april till oktober är mycket fuktig. Den bör få en skuggig växtplats med svala eller intermediära temperaturer. Plantera i väldränerad mix av medelgrov barkkompost och perlite, och vattna var fjärde till var femte dag under tillväxten. För att inducera blomning måste vattningen reduceras under vinter och vår. Då rötterna är känsliga för salter måste vatten av god kvalité användas och komposten regelbundet sköljas igenom.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium barbatum// Lindl. (1841)
//Cordula barbata// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium purpuratum// Wight (1851) nom. illeg.
//Cypripedium biflora// B.S.Williams (1862)
//Cypripedium nigritum// Rchb.f. (1882)
//Cypripedium warnerianum// Rchb.f. (1883)
//Paphiopedilum nigritum// Pfitzer (1894)
//Paphiopedilum barbatum// var. //nigritum// Pfitzer (1903)
//Cordula nigrita// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphbarbatum.htm]] 2015-02-11
[[ARKive|http://www.arkive.org/slipper-orchid/paphiopedilum-barbatum/]] 2015-02-11
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/barbatum/index.html]] 2015-02-11
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_barbatum]] 2015-02-11










































!Allmänt och utbredning
Arten är relativt vanligt förekommande från Florida, söderut genom Karibien och hela Centralamerika ner till Peru och Bolivia. Den växer på exponerade trädstammar i varma tropiska regnskogar från havsnivå till 1200 meters höjd. Det är en av de arter som har den största utbredningen i släktet.
Arten har fått sitt namn för de långa svansarna på blommorna.

!Utseende
Plantan blir medelstor och de cylindriska pseudobulberna kan bli 15 cm långa och upptill fyra cm breda. Från toppen av bulberna kommer två eller tre blad, som var och en kan bli tre dm lång och sex cm bred.
Den halvmeterlånga blomstängeln dyker upp från basen av nästan mogna bulber någon gång under vår eller sommar för att sedan börja blomma höst eller tidig vinter. Stängeln kan blomma med ett dussin hållbara, doftande blommor som var och en blir upptill 20 cm långa. Dessa är ljust gröna till gulorange, översållade med prickar och ränder i olika bruna nyanser. Läppen är äggformad med korta petaler i den karaktäristiska brassiaformen.

!Skötsel
Plantan odlas som en vanlig oncidie, i en liten kruka med en väldränerad kompost. Ge den ordentligt med ljus, enorma mängder vatten och ordentligt med gödning under tillväxten. De föredrar en varm och luftig placering.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum caudatum// Linne (1759)
//Malaxis caudata// Willdenow (1805)
//Oncidium caudatum// Rchb.f. (1863)
__Heterotypic Synonyms:__
//Brassia caudata// var. //hieroglyptica// Rchb.f. (1881)
//Brassia lewisii// Rolfe (1893)
//Brassia longissima// var. //minor// Schlechter (1922)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/brascaudata.htm]]


























































!Allmänt och utbredning
Det är en miniatyrart från Mexico, Guatemala, Honduras, Nicaragua, Costa Rica, Panama, Colombia, Venezuela, Ecuador, Peru, Bolivia och Brasilien som växer i fuktiga bergsmolnskogar mellan 400 och 1800 meters höjd.
//Epi. porpax// och //[[Epi. peperomia|7f5c167c-8e4e-4186-9dce-d8a215b27113]]// är väldigt lika till utseende men skiljer sig i några få avseenden. //[[Epi. peperomia|7f5c167c-8e4e-4186-9dce-d8a215b27113]]// har en rund eller hjärtformad läpp som är bredare än lång, har en trubbig spets, saknar doft och är bara känd från Colombia och Venezuela. De flesta plantor //Epi. porpax// i odling är antagligen i verkligheten //[[Epi. peperomia|7f5c167c-8e4e-4186-9dce-d8a215b27113]]//.
Artnamnet //porpax// betyder "har en sköld" och anspelar på blommans utseende. 

!Utseende
Det är en kompakt, mattbildande epifyt som snabbt kan kolonisera stora områden. Den saknar pseudobulber utan har enkla, sju cm långa, från sidorna tillplattade stammar som utmed hela längden bär rötter och fyra till 13 avlånga blad. Bladen är olivgröna men under hög ljusintensitet kommer de skifta i rött eller purpur. Under vintern till senvåren kommer från basen av bladen i toppen av stammen, en kort blomstängel som bär en ensam, drygt två cm stor blomma. De doftande, glänsande gröna blommorna har en rödbrun, njurformad, lika bred som lång, läpp som ger blomman ett utseende påminnande om ett bi eller en fluga. Plantan kan blomma två gånger per år med blommor som varar i ett par månader eller mer.

!Skötsel
Den är intermediär till varmväxande, inte under 15 grader och helst inte över 30 under några längre perioder. Den vill inte ha en alltför ljus växtplats. Odlas med fördel monterad som ger utrymme för dess krypande växtsätt. Vid odling i grunda skålar, ge en kompostmix med fin bark och sphagnum med extra sphagnum i topplagret. De behöver mycket vatten och en jämn fuktighet utan att torka upp för mycket mellan vattningarna och gärna regelbundna duschar för att höja luftfuktigheten. Under senvåren kan den få en vila med lätt upptorkning mellan vattningarna men låt den inte torka ut under långa perioder. De föredrar vatten av bra kvalité och gödning med varannan vattning. 

!Synonymer
__Homotypic Synonyms:__
//Neolehmannia porpax// Garay & Dunst. (1976)
//Nanodes porpax// Brieger & Lückel (1978)
__Heterotypic Synonyms:__
//Epidendrum porphyrophyllum// Schlechter (1922)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/epidenporpax.htm]]
[[Orchids on a Balcony|http://orchids-on-a-balcony.blogspot.se/2012/02/epidendrum-porpax-or-is-it.html]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/Epidendrum_porpax.html]]
















































































































































































































































































































































































!Allmänt och utbredning
Det är en liten terrestrisk eller litofytisk art från norra Peru, Colombia, Costa Rica och östra delen av Ecuador som ofta växer längs rinnande vatten eller på klippblock i bäckar och floder mellan 200 och 1200 meters höjd.
Den är uppkallad efter sin brittiske upptäckare, Richard Pearce, som fann den under en expedition 1863 för James Veitch berömda företag. Kromosomtalet är 2n=22.

!Utseende
Det är en kompakt, medelstor art som saknar pseudobulber utan bildar en solfjäder av upptill 20 cm långa och mindre än en cm breda, på ovansidan mörkt helgröna blad. Undersidan av bladen är mer ljus gröna eller gulgröna och med en tydlig, längsgående köl. Från mitten av bladen kommer under sommaren en upptill 40 cm lång blomstängel med fyra till nio blommor. Blommorna öppnas en i taget och stängeln kan blomma i flera månader. Nya stänglar utvecklas ofta när de gamla börjar vissna vilket gör att en välodlad planta kan vara i nästan konstant blom. Blommorna är sju cm stora, gröna till gulgrön och med vita eller rödbruna markeringar och vita kanter. Petalerna är lätt vridna och nedhängande. Läppen har mycket tydliga nerver i mörkgrönt. Staminoiden är halvoval eller hjärtformad med korta, styva, mörka hår mot basen, liknande ögonbryn.

!Skötsel
I sitt naturliga utbredningsområde kan den till och med hamna helt under vatten under perioder av kraftiga regn, så den är beroende av god tillgång på vatten av bra kvalité under tillväxten. Den föredrar en ljus växtplats utan direkt sol, 10000 till 25000 lux, och intermediära eller varma temperaturer, nattetid ner till 15 grader men de är mer toleranta mot värme än många andra inom släktet.
Den kan delas så snart den har minst åtta skott, men det är ofta bättre att låta den bilda en stor planta, om inte utrymmet sätter stopp. Odla den i en luftig, fukthållande mix, sphagnum och perlite eller i semihydro.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium pearcei// Veitch (1864)
//Selenipedium pearcei// Rchb.f. (1865)
//Paphiopedilum pearcei// V.A.Albert & Börge Pett. (1994)
__Heterotypic Synonyms:__
//Phragmipedium ecuadorense// Garay (1978)
//Paphiopedilum ecuadorense// V.A.Albert & Börge Pett. (1994)
//Phragmipedium pearcei// var. //ecuadorense// C.Cash (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phrapearcei.htm]] 2015-10-26
[[Slipperorchids.info|http://www.slipperorchids.info/phragdatasheets/pearcei/index.html]] 2015-10-26
[[Argus Orchids|http://www.argusorchids.net/images/photopages/p_phrag_pearcei.htm]] 2015-10-26
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=222]] 2015-10-26




























































































































!Allmänt och utbredning
Det är en liten, varmväxande litofyt som är endemisk för sandstensklippor täckta av mossa i Sarawak, östra Malaysia och i Kalimantan, Borneo, på mellan 300 och 800 meters höjd.
Den finns i två accepterade varianter: //Paph. hookerae// var. //hookerae// och //Paph. hookerae// var. //volonteanum// Braem (1988) från Mt. Kinabalus bergssluttningar som bland annat har smalare blad med en purpurprickig undersida och ett annat utseende på staminoiden.
Arten är uppkallad efter lady Hooker, hustru till Sir William Jackson Hooker som var chef för [[Royal Botanic Gardens|http://sv.wikipedia.org/wiki/Royal_Botanic_Gardens,_Kew]], Kew, England, under 1800-talets andra hälft. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Spathopetalum undersektion Macronodium. Kromosomtalet är 2n=28.

!Utseende
Det är en liten kompakt art som får fem till sex ljusgröna blad marmorerade i mörkgrönt. Bladen blir sju till 23 cm långa och tre till fem cm breda. Under vår och sommar kommer en mer än 30 cm lång blomstängel som bär en ensam, tio cm stor blomma under 25 till 35 dagar. Vad som skiljer //Paph. hookerae// åt från andra arter från samma grupp är den ovanliga blomman. Blomman från denna grupp har vanligtvis en spetsigt V-formad läpp. Läppen hos //hookerae// har en öppning mindre än vanligt och är uppsvälld runt mitten liksom hos amerikanska [[flugtrumpetväxter|http://sv.wikipedia.org/wiki/Flugtrumpetväxter]]. Petalerna är paddelformade och hålls i något under 45 graders vinkel. De har en mörkgrön bas med klart lila eller ljust blått mot spetsen. Den dorsala sepalen är klart ljusgrön med ljusare grönt längs kanterna.

!Skötsel
Området där de naturligt växer utsattes för sina kraftigaste regn under hösten och vintern. Våren är den varmaste säsongen och sommaren är sval med minst nederbörd.
Ge plantan en ljus till halvskuggig placering utan direkt sol och med intermediära till varma temperaturer. Odla i en mix av medelgrov barkkompost och perlit.
//Paph. hookerae// är en av de långsammaste växande paphiopedilumarterna. Det nya skottet tar normalt cirka två år att bli blomstort. Den föredrar mindre gödning än andra arter inom släktet och behöver färsk kompost för optimal tillväxt, plantera om varje år.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium hookerae// Rchb.f. (1863)
//Cordula hookerae// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphhookerae.htm]] 2015-05-22
[[Slipperorchid.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/hookerae/index.html]] 2015-05-22
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_hookerae]] 2015-05-22
[[Rare, Unique and Beautiful Plants Blog|http://leo-vandacoerulea.blogspot.se/2012/02/paphiopedilum-hookerae.html]] 2015-05-22














!Allmänt och utbredning
Arten är endemisk för ögruppen Filippinerna, där de växer i väldigt fuktiga bergsskogar mellan 300 och 2450 meters höjd över havet. Den förekommer genom hela ögruppen och är en av de vanligaste förekommande arterna av //Dendrochilum//. 
<$reveal type="nomatch" state="$:/temp/state-4252d906-fd22-4e64-9a53-33a38728433d" text="show">
<$button set="$:/temp/state-4252d906-fd22-4e64-9a53-33a38728433d" setTo="show">visa mer info</$button></$reveal>
<$reveal type="match" state="$:/temp/state-4252d906-fd22-4e64-9a53-33a38728433d" text="show">
Denna art har registrerats från ''Luzon'', Benguet provinsen, Mount Santo Thomas, Baguio, Mount Tonglon och Nagulian, Bataan provinsen, Lamao Forest Reserve, Mount Mariveles och Mount Limay, Cagayan Province, Mount Cagua och Mount Balatongan, Camarines Sur på berget Isarog; Ifugao, Mount Himi-o, Mount Pimmage, Mount Polis och Sumigar, Ilcos Norte på berget Burney, Kalinga-Apayao, Balbalan och Mount Sulu, Laguna på berget Banahao och Mount Maquiling, Mountain Province på berget Masapalid, Nueva Ecija, Nueva Vizcaya ; Pampanga på Mount Pinatubo, Pangasinan, Quezon på berget Camatis, Rizal, Sorsogon på Bulusan Vulkan; Zambales på Mount Apoy.

På ''Mindoro'' har man funnit arten på berget Halcon och inom Babuyan öarna. 

I ''Visayas'' har den påträffats på Leyte Island, Buenavista och Masaganap nära Jaro, på berget Mamban och Mount Suiro.

''Mindanao'', Camiguin Island på berget Camiguin, Davao del Norte-provinsen på berget Kampalili.

<$button set="$:/temp/state-4252d906-fd22-4e64-9a53-33a38728433d" setTo="hide">dölj</$button>
</$reveal>

Den förekommer huvudsakligen som epifyt i mossiga molnskogar där den bildar stora klumpar på träd. Den kan också förekomma på solitära träd i öppna, soliga habitat, höglandsregnskogar, längs toppen av bergsutlöpare och i buskiga miljöer, på både träd och klippor. 
Dess annorlunda utseende särskiljer den från alla andra kända dendrochilumarter och är därför lätt att identifiera. Det är den enda //Dendrochilum// med helt cylindriska blad. Utseendemässigt är den lik //[[Ddc. williamsii|83d7205a-cdd5-4ac7-a5ec-b263e5e7b2c0]]// och //[[Ddc. graminifolium|948281be-7459-4140-9e23-a72eb6cbb392]]// som båda är mer robusta och upprätta med annorlunda blomställningar.
Artepitetet refererar till plantornas smäckra och spröda utsende.

!Utseende
Pseudobulberna är cylindriskt avsmalnande, en till åtta cm lång och cirka två mm i genomskärning, med fyra till fem täckblad medan de växer. När bulberna mognar, sönderdelas täckbladen till fiberrester som sitter kvar runt bulberna. Bulben övergår i ett gräsliknade blad som kan bli uppemot halvmetern långt som ger hela plantan utseendet av en gräsrugge. De nya bulberna kommer vanligen under hösten. Även när den inte är i blom ger den ett elegant, annorlunda intryck. 
Blomstängeln framträder tillsammans med den nya bulben. Stängeln är omsluten av bladet upp ungefär till två tredjedelar av bladets längd och blomaxet liknar en kompakt kedja som välver sig ungefär fem centimeter upp. Varje blomställning kan bära så många som 30 stycken två millimeter stora vita eller ljust krämfärgade blommor som kommer med fyra millimeters mellanrum på stängeln. Vissa kloner har uppvisat orange eller röd läpp. I naturen har blommande exemplar samlats in under hela året utom under augusti månad. I odling på norra halvklotet blommar den vanligen under vintern eller våren. Blommorna som kommer under vintern saknar doft.

!Skötsel
Den är lätt att odla i en ljus halvskuggig växtplats med hög luftfuktighet, bra luftcirkulation och intermediära temperaturer. Den passar utmärkt på fönsterbrädan. Vattna plantan underifrån och undvik att hälla vatten över plantan, speciellt när den nya tillväxten kommer, de är känsliga för röta. I sitt naturliga habitat får de ständiga regn hela året runt så den torkar aldrig ut helt. Göd bara med svag gödning, den är känslig för salter i komposten.
Speciellt under höst och vinter verkar den växa bättre i svalare temperaturer, den ideala temperaturen är mellan sex och tolv grader under nätterna och upp till runt 24 grader dagtid. Den nya tillväxten börjar under vintern, nattemperaturen bör sänkas straxt innan. Den utlösande faktorn för blominitiering verkar vara ordentligt med ljus och svalare nätter från senhösten till tidig vinter.
Arten avskyr att störas runt rötterna så för att underlätta vid omplantering och delning bör växtförhållanden hållas så lika som möjligt före och efter ingreppet. Plantera om när nya skott börjar synas och producerar nya, friska rötter för att minska stressen på plantan. Vanligtvis förlorar de många blad efter en omplantering och mindre delningar kan snabbt ruttna bort.

!Synonymer
__Homotypic Synonyms:__
//Acoridium tenellum// Nees & Meyen (1843)
__Heterotypic Synonyms:__
//Dendrochilum junceum// Rchb.f. (1878)
//Acoridium sphacelatum// Ames (1905)
//Dendrochilum sphacelatum// Pfitzer (1907)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrotenellum.htm]]
[[Hortus Botanicus|http://roses2plant.stores.yahoo.net/ode2t.html]]
[[Dendrochilum|http://www.dendrochilum.com/page266.htm]]













































!Allmänt och utbredning
Denna miniatyrepifyt har påträffats i Minas Gerais, Brasilien i Mantiquerira bergsregnskogar likaväl som i Peru mellan 1000 och 1700 meters höjd.

!Utseende
Mot basen av stammarna är dessa omslutna av två eller tre långa tubformade bladslidor. De bär ett enkelt långsmalt blad.
Plantan blommar under tidig vinter, med en lång, mycket smal blomställning med tjogtals oansenliga blommor.

!Skötsel
Den föredrar en sval till intermediär växtplats med dämpat ljus, god luftfuktighet och bra luftcirkulation.
De växer bra i plastkrukor med mossa eller en fin paphiopedilumkompost med ungefär samma betingelser som de flesta //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//.

!Synonymer
__Heterotypic Synonyms:__
//Stelis petropolitana// Rchb.f. (1866)
//Stelis drosophila// Barbosa Rodrigues (1881)
//Stelis petropolitana// var. //latifolia// Hoehne (1919)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/stelintermedia.htm]]


































!Allmänt och utbredning
Det är en relativt vanligt förekommande art och variabel inom sitt habitat från Costa Rica till Colombia i öster och till Ecuador i sydväst. Den växer som en varm- till kallväxande dvärgliknade epifyt i lägre molnskogar på altituder från 450 till 2000 meter över havet.
Artepitetet ''nidificus'' kommer från latinets "att bygga bo" (eng. ''making a nest''), som antagligen anspelar på växtens kompakta växtsätt och dess plats högt upp bland trädens kronor.

!Utseende
Arten har ett kompakt växtsätt som bildar en tät tuva, med korta underjordiska stammar utan pseudobulber. De är mycket små med avlångt lansettlika blad som inte är mer än sju cm långa och blommor som inte är mer än centieterstora. Samtidigt har sepalerna flera cm långa spröt.
Blommorna kommer en och en, från bladskidan vid basen av varje blad, och höjer sig över dessa. De har en mörkt brunröd färg som övergår i vitt mot spetsarna på spröten. De har en angenäm, örtig doft och kommer under hösten och vintern.

!Skötsel
Arten växer bra monterad på bitar av kork, under intermediära förhållanden. I kruka behövs en kompost som hålls fuktig utan att bli genomblöt, med stort innehåll sphagnum. En kruka med levande vitmossa är ett helt ypperligt medium.
Ett annat sätt att hålla komposten ständigt fuktig, är att placera krukan i en vattentät ytterkruka med lecakulor och en bit oasis som hålls blöt. Den kräver en period med kalla nätter för att blomma. Växten vill ha en ljus växtplats utan direkt solsken.

!Synonymer
__Homotypic Synonyms:__
//Buccella nidifica// Luer (2006)
__Heterotypic Synonyms:__
//Masdevallia cyathogastra// Schlechter (1918)
//Masdevallia tenuicauda// Schlechter (1923)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/masnidifica.htm]]
[[Orkide Vinduet|http://www.orkide.hjem.wanadoo.dk/orkide/Masdevallia_nidifica.htm]]






























































!Allmänt och utbredning
Det är en epifytisk miniatyrart som lokalt kan vara mycket vanlig i de svala, glesa molnskogarna i Mexico, Belize, Guatemala, El Salvador, Nicaragua, Costa Rica, Venezuela, Colombia, Ecuador, Peru, Brazil, French Guiana, Surinam och Guyana mellan 60 och 3200 meters höjd där de växer.
Den är döpt för att hedra Lord Grey of Groby, en engelsk orkidéntusiast från 1700-talet.

!Utseende
Det ovala bladet kommer ensamt på ett kort bladskaft och hela bladet kan bli upptill fem cm långt med en purpurfärgade undersida. Med sina upptill 14 cm är blomstängeln mer än dubbelt så lång som bladen den höjer sig över. Under maj till juni kommer vanligen en stängel som bär en blomställning med flera stycken fyra mm små blommor men den kan blomma flera gånger när som helst under året. Blommorna, som är gula, gröna eller vita med markeringar i rött eller purpur, är öppna samtidigt.

!Skötsel
Ge den en sval eller intermediär, skuggig växtplats med hög luftfuktighet och god luftcirkulation. I sitt naturliga habitat utsätts den för temperaturer mellan fem grader upp till 35, men den föredrar den svalare delen av det temperaturspannet. 
Den föredrar att odlas monterad på trädormbunke men det går också att odla den i kruka om den får ett ordentligt dränerande lager med krukskärvor eller lecakulor i botten med en mix av barkkompost, träkol och sphagnum överst.

!Synonyms
__Homotypic Synonyms:__
//Pleurothallis grobyi// Bateman (1835)
//Humboldtia grobyi// Kuntze (1891)
__Heterotypic Synonyms:__
//Pleurothallis marginalis// Rchb.f. (1855)
//Pleurothallis perplexa// Rchb.f. (1860)
//Pleurothallis trilineata// Barbosa Rodrigues (1877)
//Pleurothallis crepidophylla// Rchb.f. (1878)
//Lepanthes marmorata// Barbosa Rodrigues (1881)
//Lepanthes trilineata// Barbosa Rodrigues (1881)
//Pleurothallis choconiana// S.Watson (1888)
//Humboldtia crepidophylla// Kuntze (1891)
//Humboldtia marginalis// Kuntze (1891)
//Humboldtia trilineata// Kuntze (1891)
//Pleurothallis pergracilis// Rolfe (1893)
//Pleurothallis grobyi// var. //trilineata// Cogn. (1896)
//Pleurothallis marmorata// Cogniaux (1896)
//Pleurothallis marmorata// var. //concolor// Cogniaux (1906)
//Pleurothallis barbosae// Schlechter (1921)
//Pleurothallis biglandulosa// Schlechter (1922)
//Pleurothallis ezechiasi// Hoehne (1946)
//Pleurothallis grobyi// var. //marmorata// Garay (1951)
//Specklinia marginalis// F.Barros (1983 publ. 1984)
//Specklinia biglandulosa// Pridgeon & M.W.Chase (2001)
//Specklinia ezechiasi// Luer (2004)
//Pabstiella ezechiasi// Luer (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurgrobyi.htm]]


























































































!Allmänt och utbredning
En medelstor varmväxande epifyt från Mexiko, Honduras och Guatemala. Den växer i öppna bergsskogar från 1200 upptill 1500 meter över havet.

!Utseende
Den har korta, avlångt spolformade pseudobulber som bär ett enda upprätt blad från toppen.
Blommorna kommer en per blomstjälk under våren. Den decimeterlånga blomstjälken kommer från den nyaste bulben. Blomman kan bli tio cm tvärsöver, med sepaler och petaler i äppelgrönt och läpp i vitt. Längs mitten av läppen under könspelaren finns röda eller brunröda fläckar eller veneringar. Några kloner saknar den rödaktiga markeringen och utgör en alba variant.
Under natten doftar den intensivt av hallon.

!Skötsel
Den växer långsamt och trivs bäst odlade i en väldränerad kompost i kruka eller korg, eller monterad, med mycket ljus och under varma förhållanden. God ventilation och maximalt med ljus utan att bränna bladen krävs för att försäkra en god blomning. Ge den ordentligt med gödning och mycket vatten, men låt den torka upp mellan vattningarna. När den inte är i tillväxt vill den ha torrare förhållanden.

!Synonymer
__Homotypic Synonyms:__
//Brassavola glauca// Lindley (1839)
//Bletia glauca// Rchb.f. (1862)
//Laelia glauca// Bentham (1880)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/rhynglauca.htm]]
[[Orchids Online|http://www.orchidsonline.com.au/species983.html]]
[[Revista de Biología Tropical|http://www.scielo.sa.cr/scielo.php?pid=S0034-77442003000100005&script=sci_arttext&tlng=en]]







































!Allmänt och utbredning
Arten är endemisk för Filippinerna där den växer i bergsskogar mellan 1000 och 1500 meters höjd i ögruppen Visayan.
Det är ovanligt att hitta arten i odling.
Namnet härstammar från det grekiska ''akme'', som betyder "pekade", och det latinska ''dentium'', som betyder "tand", efter det utskott vid spetsen av läppen.

!Utseende
Det är en medelstor terrestrisk art som saknar pseudobulber utan bladen kommer i fjäderformation från en mycket kort stam. De upptill 18 cm långa och fyra cm breda bladen är långsmala och mönstrade i ljust och mörkt grönt. Under våren kommer en upptill 25 cm lång, glest behårad, blomstängel med en enda, sju till elva cm stor blomma. Det kan ta mer än fyra månader från att knoppen först syns tills det att den verkligen har slagit ut. Sepalerna är vita med ränder och prickar i rosa och purpur, och en ljust olivgrön eller bronsfärgad läpp. På läppen finns ett framträdande, tandliknande utskott som är unikt inom släktet och gett arten dess namn.

!Skötsel
Området där de växer vilt på södra hemisfären utsätts för kraftiga regn under höst och vinter, lätta regn under våren och bara hög luftfuktighet under sommaren. För odling på norra halvklotet motsvarar det lätt vattning under hösten, nästan bara duschar under vintern och kraftig vattning under vår och sommar, var fjärde till var femte dag. Ge mycket svag gödning ofta. För att inducera blomning måste vattningen minskas kraftigt under vintern.
De bör hållas i ljus skugga och intermediära till varma temperaturer. Försök ge lite sol under tidiga morgontimmarna eller sena eftermiddagarna, men inte så mycket att bladen börjar skifta mot gult. Odla i en väldränerad mix av medelgrov barkkompost, perlite och sphagnum.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphacmodontum.htm]] 2015-01-23
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_acmodontum]] 2015-01-23
[[SlipperOrchids|http://slipperorchids.info/paphdatasheets/sigmatopetalum/acmodontum/index.html]] 2015-01-23
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:146972]] 2015-01-23













!Allmänt och utbredning
Ett vittspritt släkte med <$view field="count"/> arter från Guatemala till Brasilien. De växer som epifyter i molnskogar mellan 400 och 2500 meter över havet.
Carlyle Luer skapade släktet vid delning av //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]//.

!Utseende
De är alla små, två till sex cm stora, epifyter som växer i stora mattor med krypande rhizom och upprätta, korta stammar med enskilda blad.
De små blommorna kommer ensamma eller successivt på korta stjälkar från rhizomet. Läppen på blomman är upphängd med gångjärn vid könspelarens bas med en lång smal klo för att kunna vicka i vinden och locka pollinerare.

!Skötsel
Generellt behöver arterna i släktet hållas fuktiga med en hög luftfuktighet året runt. De föredrar kalla eller sval villkor med skugga.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Drya. elata|a1ff7a4c-1440-4539-b6bd-e988e54dcaec]]// Luer (1978)

''Uttal''
dry-a-DEL-lah

''Synonymer''
__Heterotypic Synonyms:__
//Trigonanthe// Brieger (1975)

!Rekommenderad läsning
[[Peripatus|http://www.peripatus.gen.nz/Taxa/Spermatophyta/Dryadella.html]]
[[Wikipedia|http://en.wikipedia.org/wiki/Dryadella]]


































!Allmänt och utbredning
//Phal. lindenii// är en av de minsta arterna inom släktet och endemisk för fyra provinser på ön Luzon i den Filippinska övärlden där den växer i subtropiska eller tropiska fuktiga låglandsskogar mellan 1000 och 1500 meters höjd över havet. Den är allvarligt hotad av insamling och habitatsförstörelse inom sitt naturliga utbredningsområde som inte är skyddat och kraftigt utsatta för mänsklig påverkan som skogsavverkning, svedjebränning och nybyggnation.
Det har föreslagits att //Phal. lindenii// skulle vara en naturhybrid mellan //[[Phal. equestris|931bdf78-2010-42e5-9d30-4f09192dd1ed]]// och //[[Phal. schilleriana|67c3e2c9-0417-46b8-a7ac-65068bd7a198]]//, men några bevis för en sådan hypotes finns inte.
Den är döpt för att hedra den belgiske 1800-tals botanisten [[Jean Jules Linden|http://en.wikipedia.org/wiki/Jean_Jules_Linden]].

!Utseende
Det är en liten epifyt med hängande växtsätt utan pseudobulber, köttiga rötter och med en väldigt kort stam som är helt omsluten av torra täckblad. Bladen blir upptill fyra cm breda och 25 cm ovalt avlånga med en utdragen spets och färgade i mörkgrönt med mönster i silver. När som helst under sommarhalvåret kan en mer än 30 cm lång blomstängel komma, tätt översållade av upptill 40 samtidigt öppna blommor i vitt med inslag av ljust rosa. Läppen har ränder i rosa och inslag av rosa eller purpur mot spetsen och små orangea fläckar mot basen. Blommorna blir mellan två och fyra cm stora.

!Skötsel
Detta är den svalaste växande arten inom släktet så odla den svalt och i ljus skugga för bästa resultat. Försök ge den elva till 14 grader under nätterna och 22 till 24 grader dagtid. Plantera den förslagsvis i lerkruka med medelgrov barkkompost och vattna en gång i veckan. Håll komposten ganska fuktig men inte blöt.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphlindeni.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Phalaenopsis_lindenii]]
[[Espáces de Phalaenopsis|http://bernard.lagrelle.pagesperso-orange.fr/Lindenii/anglais/Phalaenopsis%20lindenii%20anglais.htm]]








!Allmänt och utbredning
//Anct. formosanus// tillhör den grupp terrestrisk orkidér som populärt kallas "Juvelorkidér" för sina vackra blad skull. Den återfinns nära havsnivå på marken i skuggiga skogar på den taiwanesiska ön Formosa utanför Kinas sydöstra kust.
Den används flitigt inom den lokala naturmedicin och även har bland annat undersökts i jakten efter mediciner för att motverka cancer och diabetes.

!Utseende
Det är framför allt för de mörkt gröna, sammetslena bladen med marmoreringar i gnistrande silver och guld och en mörkröd undersida man odlar dem då blommorna är ganska oansenliga. Den bildar en bladrosett drygt sex cm i diameter med en central, upprätt, 15 cm hög blomstängel med sex eller fler blommor. Den kan blomma två eller flera gånger per år men framför allt under augusti till november. De gröngula blommorna är inte stora, bara lite över en cm stora, men den vita läppen är väldigt framträdande.

!Skötsel
Den vill ha en varm, fuktig och skuggig växtplats. Om den står för ljust kan den tappa blad. Arten trivs utmärkt i växtskåp och tropiska vivarium. Den har inga speciella behov av luftcirkulation så länge det inte blir vatten stående på bladen. Ge den hellre hög luftfuktighet än en blöt kompost. Den kan odlas i ren sphagnum eller en fin barkkompost som håller fukten bra.

!Synonymer
__Heterotypic Synonyms:__
//Anoectochilus tetsuoi// Ohwi (1958)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/anoeformosanus.htm]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/Anoectochilus_formosanus.html]]

























































































































!Allmänt och utbredning
Den återfinns terrestriskt i tjocka, sura lager lövkompost i de kustnära brasilianska bergen  i delstaten Pernambuco på halvöppna, fuktiga sluttningar mot öster eller längs rinnande vatten mellan 650 och 900 meters höjd.
Arten är uppkallad efter den amerikanske botanisten [[professor Charles Sprague Sargent|https://sv.wikipedia.org/wiki/Charles_Sprague_Sargent]] (24 april 1841 – 22 mars 1927) som var chef för Harvard University Arboretum och ansvarig utgivare för tidskriften ''Garden and Florist''. Taxonomiskt tillhör den sektionen Platypetalum. Kromosomtalet är 2n=22.

!Utseende
Det är en medelstor art som saknar pseudobulber utan har en kort stam med korta men starka rötter, som bildar en solfjäder vanligen med sex till åtta ljusgröna blad, 30 till 80 cm långa och tre till sex cm breda. Under vintern kommer en blomstängel som kan växa sig en och en halv meter lång. Hos vuxna, välväxta plantor kan stängeln grena sig och bära många tio cm stora blommor under tre månaders tid. Blommorna är gulröda till bronsfärgade med en stor, rund öppning på läppen.

!Skötsel
I naturen växer de på halvskuggiga till ljus platser, 15000 till 30000 lux, skyddade av överhängande träd. Medeltemperaturen är cirka 22 grader, med temperaturerna under regniga vintrar så lågt som tio grader och under torra somrar så högt som 18 till 28. Den relativa luftfuktigheten är hög och en konstant lätt, sval bris skapar en god luftcirkulation och nattetid bildar de fuktiga havsvindarna en kraftig dagg.
Håll den fuktig, låt den absolut inte torka ut. Använd vatten av god kvalité, R/O eller regnvatten, ge svag gödning varannan vattning, och skölj igenom komposten en gång i månaden med rent vatten för att undvika uppbyggnad av salter. Vintertid kan vattningen minskas något och gödningen dras ner till var tredje vattning. Odla i en mix av medelgrov barkkompost och sphagnum med tillsats av kalk. Det är viktigt att komposten samtidigt är poröst och kan behålla den fukt växten behöver. 

!Synonymer
__Homotypic Synonyms:__
//Selenipedium sargentianum// Rolfe (1893)
//Cypripedium sargentianum// Kraenzl. (1897)
//Paphiopedilum sargentianum// V.A.Albert & Börge Pett. (1994)
//Phragmipedium lindleyanum// var. //sargentianum// O.Gruss (2003)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragsargentianum.htm]] 2015-10-29













































































































































!Allmänt och utbredning
//Zootrophion//, som förkortas Ztrphn., är en pleurothallid som tidigare tillhörde //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]// och innehåller <$view field="count"/> accepterade miniatyrarter som växer epifytiskt på högre höjder i Centralamerika, Sydamerika och Västindien.
Arterna är inte vanliga inom odling trots att de inte är speciellt svåra och många arter säljs fortfarande som medlemmar av det numera upplösta släktet //Cryptophoranthus//.
Släktnamnet //Zootrophion// kommer från grekiskans ord för "menageri" och hänvisar till blommans säregna form som med lite fantasi kan påminna om ett djurhuvud.

!Utseende
De saknar pseudobulber utan har en välutvecklad bladstam som är uppblåst och tillplattade från sidorna. Stammen är helt omsluten av täckblad och bär ett enda, ovalt blad. En eller två gånger om året producerar de kompakta plantorna en blomstängeln från någonstans i närheten av bladstammens topp. De en eller två cm stora blommorna har sepaler som är förenade vid spetsen och bildar en lådliknande struktur med ett par "ögon" på vardera sidan som släpper in en liten pollinerare. Den lilla läppen hänger som på ett gångjärn från den utdragna könspelarens fot. Arter inom detta släkte har två polliner.

!Skötsel
Håll plantan i fuktig skugga under svala eller intermediära temperaturer. Odla dem monterade eller i krukor med en lucker, väldränerad kompostmix av fin bark och perlite eller sphagnum. Vattna regelbundet med svag gödning och håll komposten fuktig utan att övervattna, vilket är lätt, speciellt om krukan är tätpackad med sphagnum. En del odlare rapporterar goda resultat med semihydro i mindre mediumstorlek.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//Specklinia atropurpurea// Lindley (1842) synonym till //[[Ztrphn. atropurpureum|f2171d34-f994-4841-a3a3-df3371e25edb]]// Luer (1982)

''Uttal''
zoh-TROH-fee-on

!Synonymer
__Heterotypic Synonyms:__
//Epibator// Luer (2004)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Zootrophion]]
























!Allmänt och utbredning
//Pln. aurita// är endemisk för sydvästra Kina där de växer i provinsen Yunnans rhodendronskogarna från 1400 till 2800 meters höjd på sluttningar mot väster där de får sol under senare delen av dagen.

!Utseende
Den har koniska kantiga, ljusgröna pseudobulber som i toppen bär ett enda, upprätt blad mellan åtta och 18 cm långt och upptill fyra cm brett. Under våren mellan april till maj innan bladen kommit, bär den fem till 15 cm långa blomstängeln en mer än sju cm stor blomma. Blomman är mörkrosa med en stor, bred rosa läpp, mot basen en rand med klargula hår på vit eller ljust rosa bakgrund. Under dagen kan den dofta svagt av viol.

!Skötsel
Plantorna har en uttalat torr och sval viloperiod som börjar när bladen börjar gulna och varar fram tills de nya skotten börjar komma fram på vårkanten. Sluta vattna när bladen faller och börja igen när rötterna är någon eller några cm långa. Det räcker att duscha bulberna någon gång då och då under vilan. Under tillväxten kan de tolerera från några minusgrader upp till 24 grader och under viloperioden upptill fem grader.
Ge dem en ljus växtplats utan direkt sol och göd ofta med svag dos under tillväxten. Under viloperioden ska de inte ha någon gödning alls.
Plantera dem i en mix av bark och sphagnum eller i hälften torv och hälften perlite, eventuellt med en del sand. Blandningen bör hålla fukt och måste vara väldränerad. 

!Synonymer
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Pleione_aurita]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleioneaurita1.htm]]
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242338791]]



























!Allmänt och utbredning
Det är en liten epifytisk art från Papua och Nya Guinea där den växer i lövkompost på kalkstensklippor mellan 790 och 1700 meters höjd.
Det är en av de ovanligaste arterna i odling, känd från enbart några få odlingar, och en av de absolut svåraste att hålla liv i. De flesta plantor i odling under namnet //Paph. papuanum// är mer troligt färgformer av //[[Paph. violascens|39c0d0bf-724c-4ca8-8631-0b73f082a3f8]]//, då //Paph. papuanum// fram till helt nyligen har varit notoriskt svår att föröka från frö, och oerhört svår att komma till den naturliga växtplatsen.
Namnet kommer från ön där den har sitt ursprung, Papua. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Blepharopetalum.

!Utseende
Den bildar fyra till sex ovalt avlånga blad, mönstrade i ljust och mörkt grönt. Bladen blir sju till 22 cm långa och två till fyra cm breda. Under sommaren och hösten kommer en upptill 28 cm lång, upprätt blomstängel som bär en ensam blomma, sex till nio cm stor. Den dorsala sepalen är ljusgrön med vita kanter och mörkgröna, längsgående nerver. Petalerna är rödbruna, mot basen grönaktiga med mörklila prickar. Läppen är ljusgrön med nyanser av rött.

!Skötsel
December till mars är de fuktigaste månaderna med kraftiga regn, sommaren ger bara lätta duggregn och dimmor. Ge den en ljus halvskugga, hög luftfuktighet och intermediära till varma temperaturer. Odla i en väldränerad mix i medelgrov barkkompost och ungefär en tredjedel perlit.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium papuanum// Ridl. (1915)
__Heterotypic Synonyms:__
//Paphiopedilum zieckianum// Schoser (1967)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphpapuanum.htm]] 2015-06-02
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/papuanum/index.html]] 2015-06-02
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_papuanum]] 2015-06-02














!Allmänt och utbredning
Dessa miniatyrarter förekommer i bergsregnskogar från havsnivå till åtminstone 3200 meters höjd i Västindien, Central- och Sydamerika.
2001 föreslog Pridgeon & Chase att undersläktet //Specklinia// som Lindley skapade 1830 åter skulle höjas upp till ett eget släkte och föreslog en överflyttning av 86 arter från släktet //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//. I skrivande stund innehåller släktet totalt <$view field="count"/> accepterade arter.
Släktet har fått sitt namn efter träsnidaren Veit Rudolf Speckle (d. 1550) som var berömd för sina vackra illustrationer av växter.

!Utseende
Arterna inom släktet är små epifytiska, litofytiska eller terrestriska plantor med ett krypande växtsätt. Blomstänglarna är upprätta, omvälvda av en rörliknande bladskida. Vid den krypande stammen fäster bladen en och en på korta bladskaft. Bladen är vanligtvis runda till ovala. Blomstängeln är ogrenad med endast ett fåtal blommor per stjälk. Den dorsala sepalen är fri eller bildar tillsammans med de laterala sepalerna en bägare. De laterala sepalerna formar ibland en synsepal. Petalerna ibland med fransar eller tänder längs kanten. Könspelaren vanligtvis med vingar och två polliner.

!Skötsel
Odling som för //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//, de flesta arterna i släktet kräver hög luftfuktighet, ganska skuggigt och god luftcirkulation året runt. De kan monteras eller odlas i krukor med en fin barkkompost i svala till intermediära förhållanden, beroende på deras ursprung. Många arter blomma till och från när som helst under året.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[S. grobyi|43856439-8719-4d36-94de-7a4232c0ee88]]// Lindley (1830)

''Uttal''
spek-LIN-ee-ah

''Synonymer''
__Heterotypic Synonyms:__
//Acostaea// Schltr. (1923)
//Pseudoctomeria// Kraenzl. (1925)
//Verapazia// Archila (1999) no type indicated.
//Empusella// Luer (2004)
//Tribulago// Luer (2004)
//Muscarella// Luer (2006)
//Sarcinula// Luer (2006)
//Sylphia// Luer (2006)

!Rekommenderad läsning
[[Lou Jost´s publications|http://www.loujost.com/DNAFrameset/FullSpeckliniaPlate.htm]]




























































!Allmänt och utbredning
Detta släkte består av <$view field="count"/> arter, som till största delen är epifytiska. De är endemiska för Nya Guinea och de flesta kommer från högt liggande molnskogar. Där växer de i fukten på mossiga grenar och påträffas ofta i mossan på marken.
Namnet kommer av latinets ''medium'', "mitten", och ''calcar'' som betyder "sporre" och anspelar på sporren som är fäst mitt på läppen.

!Utseende
Arterna är små med krypande rhizom och välväxta exemplar kan bilda hela mattor. De har köttiga, vattenhållande blad och blir i de flesta fall endast några cm höga. Blomstängeln bär en eller två centimeter stora, klockformade blommor, som vanligen är klart djupröda på utsidan med gulgröna eller vita spetsar. Mer sällan är blommorna enfärgat guldgula eller orange.

!Skötsel
De föredrar svala till varma växtplatser, med ljus skugga och hög luftfuktighet.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Podochileae
''Undertribus'': Eriinae

''Typart''
//Med. bicolor// J.J.Smith (1900) synonym till //[[Med. paradoxum subsp. robustum|4568239c-09e6-4351-bf2d-e62fd080d031]]// A.Schuiteman (1997)

''Uttal''
mee-dee-oh-KAL-kar

''Synonymer''
N/A

!Rekommenderad läsning
[[Papua New Guinea Orchid News|http://www.orchidspng.com/Mediocalcar.html]]














!Allmänt och utbredning
Det är en art från Mexiko och Central- och Sydamerika, som växer i trädklykor upptill 1800 meters höjd.
Denna art är Guatemalas nationalblomma där den är känd som ''Monja Blanca'' eller "vita nunna-orkidén".

!Utseende
Arten får stora, äggformade pseudobulber med stor, gröna blad. Bladen kan bli 60 cm stora och fälls under hösten eller vintern.
Blommorna kommer under vintern eller våren, en och en på korta, upprätta stänglar från basen av mogna bulber. De stora, trekantiga blommorna är hållbara och doftande och mycket variabel i storlek och färg. De kan bli upptill 15 cm stora, i olika nyanser av rosa eller rent vitt, med mörkare färger på labellum. Den trekantiga formen bildas av de breda, öppna sepalerna. Labellum och petalerna är mindre och bildar en rosett i mitten av blomman.

!Skötsel
Den är lätt att odla och få i blom. Använd samma kompost som till //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]// eller finare bark uppblandat med lite torv eller mossa. Vattna och göd ordentligt medan bulben tillväxer.
Från det att bladen fälls till dess att de nya skotten börjar tillväxa hålls komposten bara fuktig under tiden som blomman utvecklas. Odlas under luftiga förhållanden med viss skugga.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria virginalis// Scheidw. (1842)
//Lycaste skinneri// var. //virginalis// Gajon-Sanchez (1930) nom. illeg.
//Lycaste skinneri// f. //virginalis// Christenson (1996) nom. illeg.
__Heterotypic Synonyms:__
//Maxillaria skinneri// Bateman (1842) nom. illeg.
//Lycaste skinneri// Lindl.(1843)
//Lycaste skinneri// var. //superba// T.Moore (1861)
//Lycaste skinneri// var. //alba// B.S.Williams (1862)
//Lycaste skinneri// var. //delicatissima// B.S.Williams (1862)
//Lycaste skinneri// var. //picturata// R.Warner (1862)
//Lycaste skinneri// var. //purpurata// R.Warner (1862)
//Lycaste skinneri// var. //rosea// B.S.Williams (1862)
//Lycaste skinneri// var. //gloriosa// R.Warner & B.S.Williams (1885)
//Lycaste skinneri// var. //reginae// B.S.Williams (1887)
//Lycaste jamesiana// auct. (1889)
//Lycaste skinneri// var. //armeniaca// Rolfe (1892)
//Lycaste schoenbrunnensis// Umlauft (1893)
//Lycaste skinneri// subvar. //alba// A.H.Kent (1893)
//Lycaste alba// Cockerell (1919)
//Lycaste skinneri// var. //cobanensis// Archila (2002)
//Lycaste skinneri// var. //albaviridis// Oakeley (2008) without type
//Lycaste skinneri// var. //labelloalba// Oakeley (2008) holotype is a photo
//Lycaste skinneri// var. //labelloflava// Oakeley (2008)
//Lycaste virginalis// f. //alba// Archila & Chiron (2011)
//Lycaste virginalis// var. //armeniaca// Archila & Chiron (2011)
//Lycaste virginalis// f. //cobanensis// Archila & Chiron (2011) nom. inval.
//Lycaste virginalis// f. //superba// Archila & Chiron (2011)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lycskinneri.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Lycaste_skinneri]]












































































































!Allmänt och utbredning
Växer som små, kallväxande litofyter på mossiga stenblock och klippor mellan 2500 och 3300 meter över havet. Arten är endemisk för ett bergigt litet område i Vietnam och Kina.

!Utseende
Den är mycket lik //[[Pln. yunnanensis|1665535a-7042-4a81-95eb-ed3d6e0bf1f1]]//, men plantan såväl som blomman är större.
//Pln. grandiflora// är rent vit med gult och rött på läppen. Sepalerna och petalerna är mycket breda och läppen är stor och fransad längs hela sin kant. Läppen är markerad i kraftigt gult med orangegult ovanpå.

!Skötsel
På sommaren placeras växterna i ett inte allt för varmt läge med god ventilation, hög luftfuktighet och halvskugga. Skuggningen är viktig, då bladen är ömtåliga och lätt bränns. Utomhus kan de tolerera full sol, men en skuggig plats är att föredra.
Temperaturen bör, om möjligt, inte överstiga 25 grader. //Pln. grandiflora// gynnas av en lång, kall vila och bör förvaras kallt fram till mars om möjligt.

!Synonymer
__Homotypic Synonyms:__
//Coelogyne grandiflora// Rolfe (1903)
__Heterotypic Synonyms:__
//Pleione pinkepankii// Braem & H.Mohr (1989)
//Pleione barbarae// Braem (1999)
//Pleione braemii// Pinkep. (1999)
//Pleione harberdii// Braem (1999)
//Pleione moelleri// Braem (1999)
//Pleione mohrii// Braem (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleigrandiflorum.htm]]




























































































!Allmänt och utbredning
Det är en svalväxande epifytisk eller litofytisk art från de fuktiga höglandsskogarna i de indiska delstaterna Assam, Meghalaya och Mizoram, Myanamar/Burma, Thailand, södra Kina, Laos och Vietnam mellan 1100 och 2200 meters höjd. Den är känd från åtta lokaler inom ett område av 56 km^^2^^.
Blomflugor lockas från långt håll av den ljusgula staminoiden i mitten av blomman som omges av mindre attraktiva, brunröda sepaler, petaler och övre delen av läppen. Doften är svagt urin-liknande, vilket imiterar däggdjurskroppsvätskor vars innehåll av salt efterfrågas av många insektsarter, inklusive blomflugor. På nära håll glittrande staminoiden som den vore täckt av fuktdroppar. Flera arter blomflugor, främst //Episyrphus alternans//, //Syrphus fulvifacies// och //Betasyrphus serarius//, landar och förlorar sitt grepp och faller därmed ner i läppens påse. De kan bara fly upp längs den bakre väggen och på vägen fastnar de klistriga pollenmassorna från ståndarknappen på bröstet på flugorna.
Artepitetet härstammar från det latinska ''villosus'' som betyder "hårig" efter de långa, mjuka håren på blomställningen och blomma. Det finns fyra accepterad varianter i [[World Checklist of Selected Plant Families|http://apps.kew.org/wcsp/home.do]], //Paph. villosum// var. //annamense// Rolfe (1907), //Paph. villosum// var. //boxallii// Pfitzer (1903), //Paph. villosum// var. //densissimum// Z.J.Liu & S.C.Chen (2009) och //Paph. villosum// var. //villosum//. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Paphiopedilum. Kromosomtalet är 2n= 26.

!Utseende
Den bildar en rosett med fyra till sju mörkt gulgröna långsmala blad, undertill mot basen prickiga i purpur. Bladen kan bli mer än 40 cm långa och bara två till fyra cm breda. Under hösten kommer en upptill 30 cm lång, grön blomstängel täckt av långa, purpurfärgade hår. Den ensamma, vaxartat glänsande blomman blir sju till 14 cm stor i främst grönt och rött med lite rosa i sepalerna. Den dorsala sepalen är ljusgrön eller gulaktig till vitaktig, fläckig mot mitten med mörkt rödbrunt. Petalerna är gulgröna och rödbruna med en tydlig mörkt rödbrun, central rand. Läppen är blekt rödbrun med mörkare nerver, staminoide är gulaktig med nyanser i ljust rödbrunt med en central gul eller grön fläck. Blommorna kan hålla mer än två månader.

!Skötsel
Vanligtvis växer den i fickor av lövkompost på träd tio till 15 m ovanför marken, ibland i kompostfyllda skrevor i klippor av granit, gnejs eller andra silikata bergarter. Området saknar torrperiod utan utsätts för kraftiga regn under sommaren och hösten, och under vintern för tunga dimmor och duggregn.
De bör odlas i måttligt starkt ljus och svala till intermediära temperaturer. Plantera i en väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomningen behövs en period under vintern med minskad vattning.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium villosum// Lindley (1854)
//Cordula villosa// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphvillosum.htm]] 2015-09-14
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/paphiopedilum/villosum/index.html]] 2015-09-14
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_villosum]] 2015-09-14
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242413936]] 2015-09-15
[[ENVIS Centre on Floral Diversity|http://www.bsienvis.nic.in/CITES/Paphiopedilum%20villosum.pdf]] 2015-09-15













































!Allmänt och utbredning
Denna miniatyrorkidé kommer från sydöstra och södra Brasilien. De växer som epifyter i molnskogar mellan 400 och 1800 meter över havet.

!Utseende
Den bildar tuvor i stora bestånd med krypande rhizom och upprätta, korta stammar med enskilda blad. De tjocka bladen är avlånga med rundade spetsar.
Blomstjälkarna är korta och kommer från basen av bladet, vanligen under sommaren. Blommorna är gula med purpurfärgade prickar och långa svansar på sepalerna. Blommorna är större än de flesta inom släktet och har en myskig jordlukt.

!Skötsel
Arten behöver hållas ständigt fuktiga och med en hög luftfuktighet året runt. De föredrar sval förhållanden med skugga.

!Synonymer
__Homotypic Synonyms:__
//Masdevallia edwallii// Cogniaux (1906)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dryedwaldii.htm]]
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/dryadella_edwallii.htm]]









































!Allmänt och utbredning
Detta släkte innehåller endast <$view field="count"/> art, //[[Zel. onusta|2766a43a-3824-4d88-8755-9d8882e33f87]]//, som tidigare tillhörde oncidiierna. Dess större genom, och det faktum att den inte korsar sig med någon annan art, har förärat den ett eget släkte. Den växer från havsnivån upptill 1200 meters höjd från Mexiko till västra Ecuador och nordvästra Peru. De växer i varma låglänta kustområden med en lång, torr vinter. De växer på både kaktusar och träd där luftfuktigheten är tillräckligt hög.
Släktet är döpt efter artisten, målaren och orkidéntusiasten Harry Zelenko, som målade tusentals arter inom undertribus Oncidiinae.

!Utseende
Den enda arten får knappt tre cm stora pseudobulberna som är ovalt ägg- eller päronformade med långsgående fåror. Bulberna är grågröna med purpurfärgade prickar och bildar en klumpformad matta tätt tillsammans på rizhomet. Varje bulb är skyddad av en välutvecklad bladflik från basen av bulben. Det ensamma bladet kommer från toppen av bulben och kan bli en dm lång och en till två cm tvärs över. Blomstängeln kommer från basen av bulben och kan bära ett fåtal till många, hållbara, doftlösa blommor under sommaren och hösten. Blommorna är två cm tvärs över, och kommer jämnt fördelade på den övre halvan av blomstängeln. Den triangulära, spetsiga sepalen är klart kadmiumgul med en central, rödaktig linje.

!Skötsel
De föredrar en ljus plats med lätt skugga, och jämn vattning under tillväxtperioden. Efter blomningen behöver de en vila med mindre vatten och gödning till dess den nya tillväxten kommer. De vill däremot inte torka ut helt under långa perioder. Ordentlig luftcirkulation och en dusch varje morgon för att höja luftfuktigheten främjar plantans tillväxt. Ge en svag dos gödning varje vecka, hälften till en fjärdedel av den rekommenderade mängden. De kan odlas monterade eller i krukor och korgar med en öppen, väldränerad kompost som medger att rötterna torkar upp fort efter vattningen.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillareae
''Undertribus'': Oncidiinae

''Typart''
//[[Zel. onusta|2766a43a-3824-4d88-8755-9d8882e33f87]]// M.W.Chase & N.H.Williams (2001)

''Uttal''

''Synonymer''
N/A

!Rekommenderad läsning
se [[Zel. onusta|2766a43a-3824-4d88-8755-9d8882e33f87]]













































































!Allmänt och utbredning
Arten återfinns emellanåt terrestriskt i mossan men vanligast är epifytiskt på buskar, trädstammar och grova trädgrenar i bergsskogarna i den malaysiska övärlden mellan 1650 och 2000 meters höjd.
Namnet kommer efter det 1774 meter höga berg, Gunung Ulu Kali, i Genting Highlands, nära Kuala Lumpur på malaysiska fastlandet där den först hittades och beskrevs av P.J.Cribb 1982.

!Utseende
Det är en medelstor planta med tätt växande, ovala pseudobulber. Bulberna har oftast tre distinkta längsgående åsar och kan bli upptill fem gånger tre cm stora. Från toppen av varje bulb kommer två smala, avlånga blad med sju till nio tydliga nerver. Bladen blir mer än 20 cm långa och drygt fem cm breda. Från basen av en mogen bulb kommer under våren en upptill 30 cm lång, hängande blomstängel som kan bära fyra till tolv samtidigt öppna blommor. Varje blomma blir drygt sju cm stor med sepaler och petaler i rent vitt. Läppen är vit på utsidan och invändigt ljust gul med bruna sidor. Blomman har en svag, inte helt angenäm doft av äkta kastanj.

!Skötsel
Plantan verkar uppskatta en ljus växtplats utan direkt sol med intermediära temperaturer. Från sitt naturliga habitat är den van vid jämna förhållanden med en temperatur mellan tolv grader på natten till 24 på dagen och regn året om, lite mindre under två månader på vintern. Den behöver god luftcirkulation och hög luftfuktighet, rötterna bör inte torka ut under längre perioder. Den verkar klara att växa varmare men då utan att blomma.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelkaliana.htm]]
[[Half a pound of treacle|http://up-your-toot.blogspot.se/2010/07/coelogyne-kaliana-kali-gunung-ulu-kali.html]]



















































































!Allmänt och utbredning
Denna miniatyrart växer som epifyt på sekundär vegetation eller litofyt nära strömmande vatten i varma och fuktiga områden i östra Himalaya, Indien, Nepal, Sikkim, Myanamar och Thailand mellan 300 och 400 meters höjd.
Den är namngiven efter Pegu, tidigare en stad i Burma. En militärjunta bytte 1989 namn på staden till Bago.

!Utseende
Den bildar ett litet kuster med knubbiga, ovalt avlånga pseudobulber som bär två till fyra brett elliptiska blad i toppen. Bulberna blir tre till fem cm långa och hela plantan sällan över tio cm stor. Bladen faller under hösten, innan blommorna kommer efter en månads torkperiod, runt januari eller februari. Från noderna vid toppen av de nyligen avlövade bulberna kommer en kort, upptill sju cm lång, blomstängel som vanligen bär en till tre, sällan så många som sju stycken, klöverdoftande blommor. Blommorna blir lite över en cm stora, vita med en fransad, purpurfärgad läpp.

!Skötsel
Plantan är sval till varmväxande. Placera den i ljus halvskugga och vattna regelbundet. Ge den mer ljus än för //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// men mindre än för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, runt 21000 lux. Under senhösten bör vattningen upphöra under minst ett par månader, tills de nya skotten kommer på våren.
Odla den monterad eller i kruka med medelgrov barkkompost eller sphagnum, gärna med lite kalk eller snäckskal inblandat.

!Synonymer
__Homotypic Synonyms:__
//Dendrobium pygmaeum// Lindl., Gen. Sp. Orchid. Pl.: 85 (1830), nom. illeg.
//Callista pygmaea// Kuntze (1891)
//Dendrobium wallichii// A.D.Hawkes & A.H.Heller (1957), nom. illeg.
__Heterotypic Synonyms:__
//Dendrobium fesselianum// M.Wolff (1990)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denpeguanum.htm]]
[[Orchid Wiki|http://orchids.wikia.com/wiki/Dendrobium_peguanum]]
[[Orchids & Flower|http://www.orchids-flowers.com/orchids/dendrobium-peguanum-lindl-1859/]]









































!Allmänt och utbredning
Detta släkte från sydöstra Asien och ut till Salomonöarna består av sju grupper och <$view field="count"/> arter. Arterna växer företrädelsevis i marknivå, i lövkompost på klippor eller trädgrenar i skuggiga regnskogar inte så högt över havsnivån. Många arter har samlats så mycket att de är hotade i naturen.
Släktet har frambringat tusentals hybrider, mer än något annat orkidésläkte. De flesta hybriderna stammar från ungefär 25 arter.
Studier har visat att paphiopedier kan gynnas av blått inslag i ljuset.
Namnet kommer från hamnstaden Paphos på ön Cyprus i Medelhavet där skönhetens gudinna Afrodite ur den grekiska mytologin steg upp ur havet och anspelar på blommans skönhet, och ''pedilon'' för "sandal" som hänsyftar på läppens form.
<$reveal type="nomatch" state="$:/temp/state-4de37127-aa20-4dc8-9397-38b26a47ba20" text="show">
<$button set="$:/temp/state-4de37127-aa20-4dc8-9397-38b26a47ba20" setTo="show">visa mer info om undersläkten</$button></$reveal>
<$reveal type="match" state="$:/temp/state-4de37127-aa20-4dc8-9397-38b26a47ba20" text="show">

Paphiopedilum cornuatum
Paphiopedilum qingyongii
Paphiopedilum viniferum

;Brachypetalum @@font-weight:normal;Pfitzer@@
://[[Paph. bellatulum|f0f4e936-5ba6-41ee-9615-76ff61c16251]]//
://[[Paph. concolor|e52e6d13-4a32-4f18-b6aa-29ff7f43bb6c]]//
:://Paph. concolor var. longipetalum//
://[[Paph. godefroyae|e6b029dc-242c-4de9-bcd3-0b13fa5adfb2]]//
:://Paphiopedilum godefroyae var. ang-thong//
://[[Paph. leucochilum|a169ef3a-bed4-4677-a46b-e5a3e515d0e0]]//
://[[Paph. niveum|ad3d7567-ba3b-4018-9896-3ed9cd970231]]//
://[[Paph. thaianum|e59bf2b5-b75a-44d1-98fd-29033c66a0e3]]//
://[[Paph. wenshanense|927004d2-f546-46e1-9a21-901b2ec7a2be]]//
;Cochlopetalum @@font-weight:normal;@@
://[[Paph. glaucophyllum|5cf09125-d434-40ef-8c76-326a055f708e]]//
://[[Paph. liemianum|20ba5c54-0e68-47e3-a9e8-33b75e0b60fe]]//
://[[Paph. moquetteanum|554d95b7-81ab-44f9-9f8d-a5f08f6061de]]//
://[[Paph. primulinum|77f0b38a-18ec-4c00-af43-ec925b2f2309]]//
:://Paph. primulinum var. purpurascens//
://[[Paph. victoria-mariae|2ac82db0-cd5e-46f8-94cd-0789130749d4]]//
://[[Paph. victoria-regina|8f6674ad-39da-4b4f-9369-7a66ed3bed84]]//
;Megastaminodium @@font-weight:normal;Braem & Gruss (2011)@@
://[[Paph. canhii|369d73cd-eae4-4108-be7a-5c7bde056141]]//
;Paphiopedilum @@font-weight:normal;@@
://[[Paph. affine|ea06aa14-2ba6-4f80-a719-73c052999018]]//
://[[Paph. areeanum|5bd4fe62-deef-4197-985d-5afe11e1c1e1]]//
://[[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]]//
:://Paph. barbigerum var. sulivongii//
://[[Paph. charlesworthii|8ed748f4-b9f6-41aa-a22b-e24759400d92]]//
://[[Paph. coccineum|734cc277-1676-4985-b15a-463cb919da83]]//
://[[Paph. druryi|c4dcd0dd-a3c5-45d8-acde-902d4c5be12d]]//
://[[Paph. exul|22fbd62d-8746-4d6b-b866-0055c6b01690]]//
://[[Paph. fairrieanum|ec2b95bf-0c72-4a37-a7ef-2153c24d1646]]//
://[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]//
://[[Paph. guangdongense|87aaf6fc-a37c-41b9-8e0b-a2c5ba9fdb12]]//
://[[Paph. helenae|23c80e10-9b9f-47b5-ace1-f00fd2696ed5]]//
://[[Paph. henryanum|1fd4b2b8-84f2-4e0a-8161-37e09dd95b03]]//
://[[Paph. hirsutissimum|9fc767d2-5209-4ea5-806d-d1e910fee547]]//
://[[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]]//
://[[Paph. spicerianum|e1ed1ff1-531e-40fe-b324-008325228bbf]]//
://[[Paph. tigrinum|23fd67e4-ee7d-4240-85dd-4eaf3d80005e]]//
://[[Paph. tranlienianum|19815b89-3628-49b4-a1ed-749143a5f652]]//
://[[Paph. vejvarutianum|1eb4c777-f2a7-42e7-b56d-793bcd2a22f0]]//
://[[Paph. villosum|4ada762d-92fa-465b-aee9-f1c979290f41]]//
:://Paph. villosum var. annamense//
:://Paph. villosum var. boxallii//
:://Paph. villosum var. densissimum//
;Parvisepalum @@font-weight:normal;Karasawa & Saito (1982)@@
://[[Paph. armeniacum|55cd05d6-abf6-4bf0-aa98-5b11403f99d6]]//
://[[Paph. delenatii|6b25e950-ad91-4c12-8e96-c83dc84b4a11]]//
://[[Paph. emersonii|388ba681-7b1e-4af3-ba80-56e6b569d94b]]//
://[[Paph. hangianum|f0cfbe04-02a4-451f-89b0-fb5df7d16b0e]]//
://[[Paph. jackii|f8f5c156-e0cd-4e74-86c4-13bf20f3fa5d]]//
://[[Paph. malipoense|8937bc2b-35e1-432c-9c05-658b6aa03b72]]//
:://Paph. malipoense var. angustatum//
://[[Paph. micranthum|2c17fc6f-2fc8-44c2-ba87-6c25bc04294f]]//
://[[Paph. vietnamense|c0dbd559-e92c-4ec7-a267-2c3c7c1b6ebb]]//
;Polyantha @@font-weight:normal;Brieger@@
://[[Paph. adductum|cc406188-d9bf-4552-8923-2f15f7070991]]//
://[[Paph. dianthum|eea31847-9fde-4949-9e50-feffc443914c]]//
://[[Paph. gigantifolium|32386508-02fc-4220-a641-4360ef968fc7]]//
://[[Paph. glanduliferum|08b40dd1-30e3-4380-9706-d73ec898e1ff]]//
://[[Paph. haynaldianum|a8cf9c33-fd1e-43cb-9c6c-fa0efb8aa477]]//
://[[Paph. intaniae|524dee2f-35b8-4303-a9fd-1f8699a4af71]]//
://[[Paph. kolopakingii|f72a725d-1ff8-4f0e-b6a8-50c69f7842a8]]//
://[[Paph. lowii|2e405981-6bdd-44eb-a79a-b965d76ccdaa]]//
:://Paph. lowii var. lynniae//
://[[Paph. ooii|5dcf87ae-13c3-40a4-a6d2-9d2c04ea672e]]//
://[[Paph. parishii|f055157f-6343-488e-b756-ade335685867]]//
://[[Paph. philippinense|05a1b2dd-84e3-436f-8eb4-e745b57d68de]]//
:://Paph. philippinense var. roebelenii//
://[[Paph. platyphyllum|1cd541b4-01a0-4cff-9016-b11adeadffab]]//
://[[Paph. praestans|cc687592-a01b-4cfc-9327-1d07b2fba922]]//
://[[Paph. randsii|36814b85-d91d-4564-b3b0-bbd9a4f62d9a]]//
://[[Paph. richardianum|78b97d5b-c4ed-4cbd-89d9-09520e1e795d]]//
://[[Paph. rothschildianum|edfdc74c-5e39-4321-97a3-be9ef4cc4c68]]//
://[[Paph. sanderianum|edfdc74c-5e39-4321-97a3-be9ef4cc4c68]]//
://[[Paph. stonei|1b9d4495-8551-441d-9fea-555ed12559f7]]//
://[[Paph. supardii|c3e778af-9eff-4052-97f4-008bc726782d]]//
://[[Paph. wilhelminae|a796361b-f920-4212-a71a-dcaa27ca8cc7]]//
;Sigmatopetalum @@font-weight:normal;Hallier fil.@@
://[[Paph. acmodontum|44ac2c5c-f92c-4829-b06a-c2545dd05a82]]//
://[[Paph. appletonianum|e47f2a8b-e629-4eb2-80dd-d7e6477e5d39]]//
://[[Paph. argus|0685359d-b27d-4aa3-bd8f-7260c0f72ce5]]//
://[[Paph. barbatum|3c581887-668a-497d-92fb-9ddaef76a96a]]//
://[[Paph. bougainvilleanum|845bbc51-e969-4fdb-991f-8aacdc04ce0d]]//
:://Paphiopedilum bougainvilleanum var. saskianum//
://[[Paph. braemii|89f6fa6c-44b5-4e41-9830-9e5b7020455f]]//
://[[Paph. bullenianum|e494260f-9340-4114-a970-85aca3aaf6a6]]//
:://Paph. bullenianum var. celebesense//
://[[Paph. callosum|58cb8f5a-cf0a-4e8f-b8f2-2e3865819dba]]//
:://Paph. callosum var. potentianum//
:://Paph. callosum var. sublaeve//
:://Paph. callosum var. warnerianum//
://[[Paph. ciliolare|eb703e47-251a-4e5d-87c8-1b746b0a5483]]//
://[[Paph. dayanum|be3f9e15-e7f3-401f-8ae7-6f0d3b472c86]]//
://[[Paph. fowliei|e2d27dd3-b54f-4aaf-aa80-edba712ac37a]]//
://[[Paph. hennisianum|19559cca-d5bd-4c71-bc27-61bb6810e032]]//
://[[Paph. hookerae|422b3d52-24e1-4f1d-8b92-9ee13f3a7e5f]]//
:://Paph. hookerae var. volonteanum//
://[[Paph. inamorii|30ff2c8f-2fac-4409-9f98-a748103fd85e]]//
://[[Paph. javanicum|265a9b4f-971a-45d2-a42b-5d524c87368b]]//
://[[Paph. lawrenceanum|95d324e4-4af0-412e-9f1f-dac2b4142b44]]//
://[[Paph. mastersianum|ca39a6a2-4bdc-49c6-b758-10e87224a2d2]]//
:://Paphi. mastersianum var. mohrianum//
://[[Paph. papuanum|481660a7-fded-44ea-a8fe-2129d4aecd33]]//
://[[Paph. parnatanum|13ba2210-e14c-46c8-9889-160805ee92ac]]//
://[[Paph. purpuratum|872ee44b-d83e-4ac6-9270-8e1443c66760]]//
://[[Paph. robinsonianum|dc949e4e-3748-4b27-86e8-c5762a6cbd54]]//
://[[Paph. sangii|65b689dc-1272-4d5c-a1ed-23f6c8996bfd]]//
://[[Paph. schoseri|5d137cc3-c8fc-4c78-b97c-9439a3ce3ef2]]//
://[[Paph. sugiyamanum|254041f2-e36e-4b37-b77b-d5d646aec17f]]//
://[[Paph. sukhakulii|a222411f-d5d5-4041-a0b4-34ea6412ed9f]]//
://[[Paph. superbiens|6c35bc33-ec75-4d33-bea4-e5fedbcfed28]]//
://[[Paph. tonsum|be73d7ef-1cc5-4905-8cde-e5fe06792f29]]//
://[[Paph. urbanianum|a045f2db-f0f6-4815-baea-63f6a27a3a36]]//
://[[Paph. venustum|26bdbddd-fba3-44fd-9aea-497dcf352b14]]//
://[[Paph. violascens|39c0d0bf-724c-4ca8-8631-0b73f082a3f8]]//
://[[Paph. wardii|028b1115-c6ea-452e-9f6e-2319cd83c430]]//
://[[Paph. wentworthianum|722631d0-1385-4663-b9f5-21bffd0be970]]//

Se också: [[Slipperorchid.info|http://www.slipperorchids.info/taxonomy/paphdescriptions/]] & [[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum]]

<$button set="$:/temp/state-4de37127-aa20-4dc8-9397-38b26a47ba20" setTo="hide">dölj</$button>

</$reveal>

!Utseende
De är vanligtvis kompakta med köttiga rötter, en kort stam och ett fåtal stora, ofta mönstrade blad. Arterna saknar pseudobulber och deras solfjädersformade bladtillväxt ger stöd åt en styv och ibland hårig blomstängel som kan ha en eller flera blommor.
Släktet har två distinkta typer, de är antingen brokbladiga eller grönbladiga. De grönbladiga växer kallt eller svalt och blommar med endast en blomma i fjolårsskottet.
Blommorna är betydligt annorlunda än de flesta andra orkidéers blommor genom sin påsliknande läpp under den sköldformade staminoiden, och håren, vårtorna och utväxterna på petalerna.

!Skötsel
De växer bäst i så små krukor som möjligt, i en grov barkkompost med ljus skugga och regelbunden vattning med god luftcirkulation. Luftcirkulationen är viktigare än hög luftfuktighet, men undvik dragiga växtplatser som nära öppna fönster eller varmluftsventilation. Ett öst- eller västfönster är den bästa växtplatsen ur ljusförhållande. Ett mörkt grönt, hängande bladverk antyder att plantan får för lite ljus.
De varmväxande, brokbladiga arterna föredrar 20 till 30 grader under dagen, och ner till 16 grader nattetid under de mörka månaderna. De kallväxande, grönbladiga, kan fördra tolv grader under natten vintertid och upptill 25 grader sommartid.
Eftersom växterna inom detta släkte inte har några pseudobulber krävs att komposten kan hållas jämnt fuktig. Inte blöt, men inte heller helt torrt. Vattna två gånger i veckan, mer sällan under vintern. Vid odling i barkkompost bör en svag näringsdos användas, kväverik gödning med halva den rekommenderade dosen varannan vecka, eller en fjärdedels styrka vid varje vattning. Under vintermånaderna räcker det med gödning en gång i månaden. Allt för stark gödning kan bränna de köttiga, håriga rötterna.
Omplantering bör ske minst vartannat år, gärna betydligt oftare, en eller två gånger om året är det bästa. Komposten bör vara av fin- eller medelgrov bark, perlite, sand och mossa. De är svåra att fröföröka, men stora plantor kan lätt delas i klumpar om tre till fem småplantor. Mindre sticklingar tillväxer, men kommer antagligen inte att blomma under lång tid. Plantera inte i för stora krukor, de trivs trångt.

!Taxonomi
''Underfamilj'': Cypripedioideae
''Tribus'': N/A
''Undertribus'': N/A

''Typart''
//[[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]]// Pfitzer (1888)

''Uttal''
paff-ee-oh-PEE-di-lum

''Synonymer''
__Heterotypic Synonyms:__
//Cordula// Rafinesque (1838)
//Menephora// Rafinesque (1838)
//Stimegas// Rafinesque (1836)

!Rekommenderad läsning
[[PhilsOrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_parvisep.htm#General]]
[[ChelseaGardenCenter|http://www.chelseagardencenter.com/paphiopedilum.html]]
[[AllAboutOrchids|http://www.orchid.org.uk/paphcult.htm]]
[[Paphiopedia|http://www.paphiopedia.com/wiki/index.php/Main_Page]]
[[American Orchid Society|http://www.aosforum.org/pdf/Paph_beginner_1.pdf]]
[[Antec Laboratory & Ladyslipper Farm|http://www.ladyslipper.com/1stpaph.htm]]
[[Cypripedioideae|http://cypripedioideae.e-monocot.org/taxonomy/term/256/descriptions]] 2015-05-17

;Eduardo Zeiger, C. Grivet, Sarah M. Assmann, Gerald F. Deitzer, M. W. Hannegan, 1985
://Stomatal Limitation to Carbon Gain in Paphiopedilum sp. (Orchidaceae) and Its Reversal by Blue Light//, Plant Physiol. feb 1985; 77(2): 456-460















































!Allmänt och utbredning
Denna ganska sällsynta miniatyrart återfinns klängande på vertikala trädstammar i regnskogarna och lägre bergsskogar i södra México och Costa Rica mellan 300 och 900 meters höjd.
Den är döpt efter den samtida botanisten Mario Alberto Blanco från Costa Rica som var den som först upptäckte och samlade in arten.

!Utseende
Det är en miniatyrplanta som sällan blir mer än tio cm stor. Den har en kort stam, drygt en cm lång, omgiven av tunna, pergamentslika täckblad som bär ett enda, bågformigt långsmalt blad i toppen. Bladet kan bli sex till åtta cm långt och en cm brett. Mer eller mindre när som helst under året kan den blomma med fem mm stora, mörkt röda blommor.

!Skötsel
I sitt naturliga habitat får de hög luftfuktighet, en konstant temperatur mellan 20 och 30 grader. Ge den en ljus växtplats utan direkt solljus.

!Synonymer
__Homotypic Synonyms:__
//Pleurothallis blancoi// Pupulin (2000)
//Tribulago blancoi// Luer (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurblancoi.htm]]


















































































































!Allmänt och utbredning
Det är en kall till svalväxande miniatyr epifyt från Papua och Nya Guinea.

!Utseende
Arten är mattbildande med pseudobulber som blir nästan cylindriska med tunna, trådlika rötterna. Nya skott kommer från basen av pseudobulben. Bulben bär två till tre blad som blir mindre än två cm långa. Blommorna kommer på en mycket kort blomstängel från toppen av en ny pseudobulb. Varje blomställning bär en ensam, klockformad blomma som håller länge. Dessa är stora för släktet och mestadels röda.

!Skötsel
Eftersom den är mattbildande odlas den med fördel monterad eller i låga, vida terrakottakrukor i en blandning av medelgrov bark och perlite. Göd ofta med svag näringsdos och håll dem relativt fuktiga. Bladen är succulenta och skrumpnar lätt om vattningen inte är tillfredsställande. Den föredrar en sval placering med mycket ljus, dock mindre ljus än cattleyor. De frodas i svala omgivningar och tillväxten upphör faktiskt nästan helt under sommaren, för att åter sätta fart på hösten under den svala delen av året.

!Synonymer
__Heterotypic Synonyms:__
//Mediocalcar pygmaeum// var. //altigenum// Schlechter (1911)
//Mediocalcar sigmoideum// Schlechter (1911)
//Mediocalcar crassifolium// J.J.Smith (1913)

!Rekommenderad läsning




























!Allmänt och utbredning
//Dresslerella//, som förkortas //Dla.//, är ett litet släkte med bara <$view field="count"/> epifytiska arter från de tropiska bergsmolnskogarna i Centralamerika och nordvästra Sydamerika från Guatemala till Bolivia mellan 300 och 2500 meters höjd. Den största ansamlingen av arter påträffas i Panama med sju arter följt av Ecuador där sex arter har registrerats hittills. Med undantag av //[[Dla. powellii|e4b99d65-c920-4366-95ab-7dff4d8334b2]]// som bildar stora bestånd, växer de som spridda, enskilda individer inom sitt naturliga utbredningsområde.
Släktet är döpt för att hedra den framstående forskaren Robert L. Dressler och med den latinska ändelsen ''-ella'' som används om plantornas ringa storlekar.

!Utseende
Större delen av plantan, bladen, till och med blomställningarna och blommorna är täckta med hår, troligen som skydd mot betande djur. De är små plantor, vanligen mellan tre och 15 cm stora, har tjocka och tunga blad i hängande rosetter och enkla blommor med luddiga sepaler. Blomstängeln är oftast kortare än bladen och kommer från toppen av bladskaftet där bladskivan tar vid. Den ensamma, köttiga blomman vilar på bladets ovansida. Den dorsala sepalen är triangulär och de laterala sepalerna är hopväxta till en påse. Hos många arter är blommorna företrädesvis purpurfärgad eller gula med prickar och ränder i rött.

!Skötsel
De behöver hög luftfuktighet, halvskugga och svala till varma temperaturer. En del arter växer i de varma, skuggiga låglandsskogarna medan andra arter föredrar mer utsatta växtplatser med mycket ljus. De växer vanligen som äkta epifyter och bara väldigt sällan påträffas de på marken längs vägarna täckta av tjocka lager mossa.
De är svåra att dela då rhizomen är väldigt korta och plantorna verkar inte dela sig naturligt. Det går att föröka med bladskott som för //[[Restrepia|a3a2cec3-61a6-4caa-a365-396d3bb1cf97]]//, men det är svårt och lyckas endast i undantagsfall. De kan producera kekikis men bara om de är riktigt missnöjda med komposten.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Dla. pertusa|be5f8966-38ee-4c71-878f-c2040816567b]]// Luer (1970)

''Uttal''
dress-ler-EL-lah

''Synonymer''
N/A

!Rekommenderad läsning
[[Epidendra|http://www.epidendra.org/taxones/Dresslerella/Dresslerella/Medina%20&%20Pupulin%202010%20-%20Dresslerella.pdf]]




















































!Allmänt och utbredning
Det är en minatyrepifyt från Indien, Burma och Thailand.
Den namngavs 1851 av William Griffith för att hedra den brittiske botanikern John Lindley.

!Utseende
De ovala pseudobulberna är tillplattade från sidorna och växer i täta grupper. De blir tre cm stora med ett ensamt, avlångt, upptill 15 cm långt blad från toppen av bulben. Under vintern och våren kommer den tio till 20 cm långa, hängande, blomstängeln från basen av de nyaste mogna bulberna. Stängeln kan bära så många som 15 stycken blommor. De tätt behårade blommorna blir åtta mm stora i vitt eller ljust gröna nyanser med purpurfärgade streck och kantlinjer.

!Skötsel
Vattna tre till fem gånger per vecka. Vintertid behöver den torka lätt mellan vattningarna, men sommartid kan den odlas ständigt lätt fuktig. Den vill ha en varm och ljus växtplats med 25000 till 35000 lux utan direkt solljus. Ge den en temperatur mellan 15 och 25 grader.
Den kan odlas i en mix av sphagnummossa och fin barkkompost, eller så odlas den med fördel monterad på bark eftersom den inte tycker om att bli störd av en omplantering.

!Synonymer
__Homotypic Synonyms:__
//Phyllorkis lindleyana// Kuntze (1891)
__Heterotypic Synonyms:__
//Bulbophyllum rigens// Rchb.f. (1865)
//Bulbophyllum caesariatum// Ridl. (1924)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulblindleyanum.htm]]
[[Orchids Online|http://www.orchidsonline.com.au/node/1123]]
[[Butterflys & Orchids Gallery|http://www.orchidfoto.com/thumbnails.php?album=117]] (bilder)
[[Groáräschener Orchids|http://www.orchideenwlodarczyk.de/shop/catalog/bulbophyllum-lindleyanum-p-572.html?language=en]] (bilder)
[[Orchids Wiki|http://orchids.wikia.com/wiki/Bulbophyllum_lindleyanum]]


!Allmänt och utbredning
Det är en medelstor epifyt, och mer sällan litofyt, från El Salvador och México där den växer mellan 300 och 1600 meters höjd i lägre bergsmolnskogar på utsatta klippor eller träd i områden med extrema temperaturskillnader. 
Arten pollineras av kolibrier.
Tillsammans med //[[Gur. skinneri|8d5fdb45-bad1-4c90-bf00-d34575373022]]// kan den producera naturhybriden //Guarianthe x guatemalensis//.
Artnamnet kommer från den latinska femininformen av adjektivet ''aurantiacus'' som betyder "orangefärgad" som naturligtvis anspelar på blommornas färg.
Kromosomtalet är 2n=40.

!Utseende
Den får smala, avlångt cigarrformade pseudobulber som är lätt tillplattade från sidorna, upptill 30 cm långa och en cm i diameter. Från toppen av bulben bär den två avlånga, hårda, läderartade blad, tolv till 15 cm långa och fyra cm breda, med rundade spetsar. Hela plantan blir sällan större än 45 cm hög. Under senvintern till våren kan en fullväxt bulb från föregående sommar producera så många som ett dussin, tre cm stora blommor på en knappt två dm lång blomstängeln. Det finns två färgvarianter, en med gula blommor och en med klart orangea, ibland med prickar eller ränder i rött eller purpur. Blommorna håller mellan tio och 20 dagar. Den här artens blommor är de minsta inom släktet och den norra populationen kan självpollinera vilket gör att blommorna inte öppnas helt. Den eventuella, åtta cm stora, frökapseln färdigbildas under senvintern, mer än ett halvår efter att blommorna vissnat.

!Skötsel
Den föredrar svala eller intermediära temperaturer, men dess stora utbredningsområde gör att den även kan anpassa sig till lite varmare temperaturer om luftcirkulationen är tillräcklig. Den kräver mycket ljus under tillväxtperioden för att producerar vårens blommor. Dess naturliga habitat är mycket fuktigt med rikliga regn så den vill inte vara torr under längre perioder. Dock behöver den torka upp snabbt igen så inte rötterna är ständigt blöta. Vattning minst en gång i veckan. En liten kruka med en väldränerad och genomsläpplig barkkompost är att rekommendera, eller odling i semihydro.
Den behöver en torr vintervila med svala nätter ner till, men inte under, tio grader under tre eller fyra månader, tills de nya rötterna börjar synas på våren. Under vilan bör den hållas torrare men inte helt torr, och luftfuktigheten måste hållas hög under hela året.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum aurantiacum// Lindl. (1838)
//Cattleya aurantiaca// P.N.Don (1840)
//Amalia aurantiaca// Heynh. (1846)
//Laelia aurantiaca// Beer (1854)
__Heterotypic Synonyms:__
//Broughtonia aurea// Lindl. (1840)
//Epidendrum aureum// Lindl. (1853)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/catleyaaurantiaca.htm]]
[[The Conservation Education & Science Department Arizona-Sonoran Desert Museum|http://www.desertmuseum.org/programs/alamos_orchids_cataur.php]]
[[BellaOnline|http://www.bellaonline.com/articles/art68101.asp]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Guarianthe_aurantiaca]]
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Cattleya-aurantiaca]]








































!Allmänt och utbredning
Släktet omfattar <$view field="count"/> arter som förekommer i tropiska och södra Afrika, på Madagaskar och de angränsande öarna. Majoriteten av arterna i släktet växer som epifyter eller litofyter i torr, tropisk skogsmark. De växer från havsnivå upptill 2000 meters höjd.
Släktnamnet kommer från det malaysiska ordet för orkidé, ''angrek'' eller ''angurek''.

!Utseende
De har inte pseudobulber, utan en ständigt växande monopodial stam eller stammar. Inom släktet är de väldigt varierande, både till växtsätt och till blommans utseende. Medlemmarna i släktet har vanligtvis vita, gula eller grönaktiga blommor som kommer en eller flera på en lång blomstängel. De hållbara blommorna är ofta doftande nattetid. Alla arter har en lång nektarsporre från backsidan av läppen, med //[[Angcm. sesquipedale|f354ffcc-9f3d-4b8f-8da4-6ecbadfe451f]]// som med sin dryga halvmeter långa sporre är rekordhållare.

!Skötsel
De odlas med fördel i korgar i skugga och med hög luftfuktighet. Under tillväxten behöver de ordentligt med vatten. När de inte tillväxer krävs inte lika mycket vatten, men de får inte tillåtas torka ut under några längre perioder.
Odla dem i ett öppet medium i krukor eller korgar. Småplantor kan odlas monterade på kork eller bark. Äldre plantor kan behöva ett växthus, eftersom de kan bli ganska stora.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Vandeae
''Undertribus'': Angraecinae

''Typart''
//[[Angraecum eburneum|3008498a-1c24-40a6-8dc2-9531ae022201]]// Bory (1804)

''Uttal''
an-GRY-kum

''Synonymer''
__Heterotypic Synonyms:__
//Angorchis// Thouars (1809) nom. illeg. 
//Aerobion// Kaempfer (1826)
//Macroplectrum// Pfitzer (1889)
//Bonniera// Cordem. (1899)
//Lepervenchea// Cordem. (1899)
//Pectinaria// Cordemoy (1899)
//Ctenorchis// K.Schum. (1901)
//Monixus// Finet (1907)
//Dolabrifolia// Szlach. & Romowicz (2007)

!Rekommenderad läsning
[[Orchids of the World|http://www.orchids.mu/Species/Angraecum/]]
[[Encyclopedia|http://encyclopedia.laborlawtalk.com/Angraecum/]]
[[NeoVita|http://www.neovita.com/orkideer/no.cgi?artikel=grund&grupp=angraecum&avdelning=latinsktNamn&huvudavdelning=rad/]]



































































































































































































!Allmänt och utbredning
Arten växer i mossa och nedbrutna löv på kalkstensklippor i centrala Sulawesi, Indonesien, mellan 700 och 1070 meters höjd över havet.
Den är nära besläktad med //[[Paph. philippinense|f055157f-6343-488e-b756-ade335685867]]//, //[[Paph. randsii|36814b85-d91d-4564-b3b0-bbd9a4f62d9a]]// och //[[Paph. stonei|1b9d4495-8551-441d-9fea-555ed12559f7]]//. Men //Paph. intaniae// skiljer sig morfologiskt åt på flera punkter från de närmaste arterna. Den har kortare och raka petaler som inte är tvinnade, den är fläckad med brunt från basen till halva längden sedan strimmig och med bruna markeringar på den övre halvan. Det har också fyra till sex små hårbeklädda vårtor på vardera sidan nära basen mot mitten av petalerna. Läppen hos //Paph. intaniae// är kortare än hos //[[Paph. stonei|1b9d4495-8551-441d-9fea-555ed12559f7]]// och med en annorlunda staminod. Taxonomiskt tillhör den undersläkte Coryopedilum.

!Utseende
Det är en medelstor planta med fyra till sju helgröna blad som kan bli mer än 40 cm långa och drygt sex cm breda. Under senvåren till tidig sommar kommer en upprätt, upptill halvmeter lång blomstängel med tre till åtta stycken samtidigt öppna blommor mellan tio och tolv cm stora. Den dorsala sepalen och synsepalen är vit och grönvit vid basen, med strimmor i brunt. Petalerna är vita eller ljust grönaktigt med bruna fläckar från basen till halva längd sedan tvärstrimmiga och med brunt på den övre halvan. Läppen är blekgul med ett ljusbrunt nätmönster. Staminoden är ljusgrön eller ljusgul, med ett grönt mönster i mitten och vitt på vardera sida. Håll knopparna i skugga för mer mättade färger.

!Skötsel
Dess naturliga utbredningsområde utsätts för kraftiga regn från höst till vår och lätta regn resten av tiden, området är sällan helt torrt. Ge den en ljus placering utan direkt sol, 20000 till 32000 lux, och intermediära till varma temperaturer. Plantera i en öppen, väldränerad mix av medelgrov barkkompost och perlite eller sphagnum. Vattna regelbundet var fjärde till var femte dag och skölj igenom komposten ordentligt med jämna mellanrum, den tål inte uppbyggnad av salter. Sänk temperaturen under minst tre veckor vintertid för att inducera blomningen.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphinatinae.htm]] 2015-05-24
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_intaniae]] 2015-05-24
[[Orchid Japan|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/newpaph19.html]] 2015-05-24



















































































































!Allmänt och utbredning
Den förekommer på träd i öppna skogar upptill 1500 meters höjd i Mexiko, Guatemala, El Salvador, Honduras, Nicaragua och Costa Rica.
Arten kallas ibland "kokosnötorkidén" (eng. ''the Coconut Orchid'') på grund av sin doft.

!Utseende
Plantorna består av ett långsträckt rhizom med bulberna ett par cm isär. pseudobulberna är ett par cm höga och mandelformade, med ett grässtråliknande blad. Plantan förgrenar sig i regel villigt och skapar därigenom klungor med många blommor och bulber.
Från en mogen bulbs bas kommer under sommaren en fem cm lång stängel som bär en ensam, hållbar blomma. Blommorna är drygt två cm stora och gula med blodröda markeringar. Fläckarna kan variera från praktiskt taget inga till nästan helt täckande.

!Skötsel
Denna art växer bäst under ljusa förhållanden, lätt skuggad med indirekt sol. Ge plantan svala förhållanden med god luftgenomströmning och svalare nätter. Efter blomningen behöver plantan en torrare vintervila under de kalla månaderna.
Plantan odlas med fördel monterad eller i en mix av två delar bark och en del vitmossa, eller direkt i ren levande vitmossa. Det krypande växtsättet kan göra att plantan kryper ur krukorna. Se till att komposten alltid är en aning fuktig men aldrig våt under några längre perioder. Den är lätt att föröka plantan genom delning av sidoskott. Varje del bör ha minst tre bulber och ett nytt skott.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria tenuifolia// Lindl. (1837)
__Heterotypic Synonyms:__
//Maxillaria gracilifolia// Kraenzl. (1927)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxillariatenuifolia.htm]]
[[Cals Plant of the Week|http://www.plantoftheweek.org/week032.shtml]]
[[Bella Online|http://www.bellaonline.com/articles/art43920.asp]]
























































!Allmänt och utbredning
//Phrag. vittatum// [frag-muh-PEE-dee-um vy-TAH-tum] är en stor terrestrisk art från sydöstra och västra centrala Brasilien mellan 875 och 1600 meters höjd över havet. Den växer enbart i väldigt speciella områden med sura torvmossar som utsätts för regelbundna översvämningar, men där kan den lokalt vara extremt vanlig. På en kvadratmeter kan mer än 1000 plantor samsas.
Det var den första kända arten inom släkte som beskrevs av den brasilianske fransiskanermunken José Mariano Conceição som //Cypripedium vittatum// redan 1831. Den latinska beskrivningen fick dock vänta på sig till 1881. Den troddes länge utrotad i naturen men 1960 när staden Brasilia skulle anläggas upptäcktes flera nya lokaler.
Artepitetet betyder "longitudinellt randig" och sägs hänvisa till bladens gula kanter. Taxonomiskt tillhör den sektion Lorifolia. Kromosomtalet är 2n=18.

!Utseende
Den saknar psudobulber utan bildar en kompakt solfjäder med relativt korta och smal blad, 30 till 55 cm långa och två till fyra cm breda. Bladen är helt ljusgröna med gula kanter. Under våren fram till april kommer en upptill 80 cm lång blomstängel. Stängeln producerar en till sex blommor som öppnar sig en efter en. Blommorna är grönlila till ljust gulbruna.

!Skötsel
Den växer i halvskugga till full sol skuggad av höga gräs i torvrika mossar som periodvis utsätts för bränder. Den behöver mycket ljus och intermediära eller varma temperaturer. Ge den mycket vatten, låt den aldrig torka ut.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium vittatum// Vell. (1831)
//Selenipedium vittatum// Rchb.f. (1876)
//Paphiopedilum vittatum// Stein (1892)
__Heterotypic Synonyms:__
//Cypripedium paulistanum// Barb.Rodr. (1877)
//Cypripedium vittatum// var. //breve// Rchb.f. (1881)
//Cypripedium binotii// auct. (1887)
//Selenipedium paulistanum// Rolfe (1893)
//Selenipedium vittatum// var. //breve// Cogn. (1893)
//Paphiopedilum paulistanum// Pfitzer (1894)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragvittata.htm]] 2015-11-03
[[Slipperorchids.info|http://www.slipperorchids.info/phragdatasheets/vittatum/index.html]] 2015-11-03
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=318]] 2015-11-03

























































!Allmänt och utbredning
Arterna inom släktet är spridda genom det tropiska och subtropiska delarna av Amerika, från Argentina i norr till Florida i söder. De växer från havsnivå till 3500 meter över havet som både terrestra, litofyter och epifyter. Detta släkte består numera av <$view field="count"/> arter från tidigare mer än 900. Många arter har fördelats på olika nya släkten som //[[Christensonella|2da04776-8258-4de2-84b5-f27a74cd2fda]]// och //[[Maxillariella|279b649e-443b-4cfb-acd1-4453a27b7478]]//.
De känns ofta igen på sina trekantiga blommor med något som påminner om ett överbett. Deras namn kommer också från det latinska ''maxilla'' som betyder "käkben" och kommer från hur könspelaren och basen av läppen är fästa vid varandra hos vissa arter och ger ett utseende som påminner om en utskjutande käke.

!Utseende
De kryper fram med korta eller längre rhizom från vilka det bildas klungor av pseudobulber med ett eller två blad eller inga bulberna utan bara blad. Blomställningen ger vanligen endast en blomma som kan vara liten eller stor och spektakulär med fria sepaler och petaler, en treflikad läpp och fyra vaxartade polliner. Petalerna liknar sepalerna men är mindre i storlek. Det finns två grupper arter som skiljs åt genom hur läppen är fäst vid basen av kolumnen. Den första gruppen har läppen fullständigt förenad med kolumnen och har oftast små blommor, som //[[Max. cassapensis|e76c90fc-20d8-40ca-b2ca-e9d14d22aaa6]]//. Den andra, som är den största gruppen, har läppen förenad med ett slags gångjärn till könspelaren och har större blommor.

!Skötsel
De vill ha lite mindre ljus än //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//. Under sommaren behöver de lätt skugga och ständig fukt. Vattna ordentligt och duscha en eller två gånger om dagen. Vintertid behöver de allt tillgängligt ljus.
De vill ha jämn vattning hela året och god luftväxling runt rötterna. De flesta som kommer från högre belägna områden föredrar en kall eller sval omgivning.
Odla dem i krukor, korgar eller monterade på bark. Dela plantorna när de växt ur krukan och svämmar över sidorna.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Maxillarieae

''Typart''
//Max. ramosa// Ruiz & Pavon (1794) synonym till [[//Max. cassapensis|e76c90fc-20d8-40ca-b2ca-e9d14d22aaa6]] M.A.Blanco & Carnevali (2007)

''Uttal''
maks-il-lair-ee-uh

''Synonymer''
__Heterotypic Synonyms:__
//Menadena// Rafinesque (1837)
//Pentulops// Rafinesque (1838)

!Rekommenderad läsning
[[MaxillariaTribe|http://www.geocities.com/rainforest/5278/]]
[[Wikipedia|http://en.wikipedia.org/wiki/Maxillaria]]
[[AngelsOrchids|http://www.angelfire.com/on4/angelorchids/newspieces/Maxillariaeglish.htm]]
















!Allmänt och utbredning
Denna variabla, epifytiska miniatyrart kommer från de fuktiga bergsskogarna i Mexico norr och söder ut till Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama, Colombia, Ecuador och några få utspridda platser i Peru, där de växer ända från 300 till 2500 meters höjd.
//Rstp. muscifera// skiljer sig från andra arter av släktet genom de tjocka läderartade ovala, mer eller mindre spetsiga blad. Även att de korta blomstjälkarna bär blomman nära basen på undersidan av bladet. De dorsala sepalerna och petalerna är dessutom tydligt klubbformad.
Artepitetet kommer från det latinska ''muscifer'' som närmast kan översättas med "flygbärare" och anspelar på blommans utseende.

!Utseende
Den saknar psuedobulber utan det ensamma, avlångt ovala, läderartade bladet kommer på en upptill 17 cm lång stjälk från en underjordisk horisontell stam. Hela plantan kan bli uppåt 25 cm hög med blad som blir upptill åtta cm långa och fyra cm breda. Hela eller åtminstone stora delar av undersidan av bladet är mörkt rött eller purpur. Den får tunna luftrötter som liknar hårstrån. De små blommorna, bara cirka en cm stora, kommer på en tunn, två cm lång stängel på undersidan av bladskivan, nära bladbasen. Blomstängeln producerar flera två cm stora blommor som öppnas successivt under sommaren till vintern. Den långa dorsala sepalen är upprätt, trekantig och nästan genomskinligt vit, mer eller mindre täckt med mörkröda prickar och avslutas med en grövre, gul, klubbformad spets täckt med små purpurprickar. De laterala sepalerna, synsepalerna, är sammanväxta med en längd av två och en halv cm, och med en kluven spets. Hela blomman är företrädelsevis nästan genomskinligt vit med mörkröda eller purpurfärgade prickar. De långa laterala petalerna slutar i tjocka, gula klubblika spetsar. Den korta läppen är oval med samma färgtema i mörkt rött och purpurprickar som resten av blomman.

!Skötsel
Den trivs bra både monterad eller odlad i kruka i en mix av trädormbunke, barkkompost och sphagnum. Den föredrar svala till intermediära förhållanden med halvskugga och hög luftfuktighet.
Plantera växten i en fin barkmix med perlit eller vitmossa. Vatten regelbundet och håll komposten fuktig.

!Synonymer
__Homotypic Synonyms:__
//Pleurothallis muscifera// Lindley (1842)
__Heterotypic Synonyms:__
//Restrepia lansbergii// Hooker (1861), nom. illeg.
//Restrepia xanthophthalma// Rchb.f. (1865)
//Restrepia dayana// Rchb.f. (1875)
//Restrepia shuttleworthii// Rolfe (1892)
//Restrepia powellii// Schltrer (1922)
//Restrepia tonduzii// Schltrer (1923)
//Pleurothallis dayana// L.O.Williams (1940)
//Pleurothallis xanthophthalma// L.O.Williams (1940)
//Restrepia muscifera// subsp. //shuttleworthii// H.Mohr (1996)
//Restrepia muscifera// f. //dayana// O.Gruss & M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/resmucifera.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Restrepia_muscifera]]
[[Orchid photographs by Gary Yong Gee|http://www.yonggee.name/Notes/Restrepia_muscif.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_muscifera]]
[[Orchid Karma|http://www.orchidkarma.com/restrepia-muscifera/]]



!Allmänt och utbredning
//Phrag. brasiliense// [frag-muh-PEE-dee-um bra-sill-ee-EN-see] härrör, som namnet antyder, från norra Brasilien, där den växer terrestriskt utan någon närmare angiven växtplats.
Runt sekelskiftet 2000 fick Jerry Fischer från växtfirman ''Orchids Limited'' två onamnade plantor från Ron Ciesinski vid ''Taylor Orchids'', Michigan, USA. De hade inhandlats mer än 20 år tidigare av John Fitch från Margaret Ilgenfritz, som ursprungligen hade importerat dem från Brasilien. Först troddes plantorna vara //Phrag. roezlii//, synonym för //[[Phrag. longifolium var. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]//. I vissa avseenden liknade de också //[[Phrag. vittatum|53e4073c-1fb5-454a-834b-4a3c9f32f225]]// men de visade sig lättare att odla och växte snabbare än //[[Phrag. vittatum|53e4073c-1fb5-454a-834b-4a3c9f32f225]]//. Blommorna liknar de hos //[[Phrag. vittatum|53e4073c-1fb5-454a-834b-4a3c9f32f225]]// med den största skillnaden är läppens mer intensiva färger och mönster hos //Phrag. brasiliense//. De två plantorna korsades med varandra och alla de resulterande plantorna uppvisade samma egenskaper, något som sannolikt inte skulle hända om ursprungsplantorna var hybrider, naturliga eller människoskapade.
Taxonomiskt tillhör den sektion Lorifolia.

!Utseende
Den bildar en rosett med sex till nio långsmala, läderartade blad, upptill 60 cm långa och två till tre cm breda. Ovansidan av bladen är mörkgröna med ljusare kanter och undersidan ljusgrön. Under vår och höst kommer en upptill 120 cm lång blomstängel som bär mer än 20 blommor med en till tre samtidigt öppna blommor. Blommorna blir sju till tio cm stora, med vridna, gröna petaler som tonar över i rödbrunt mot spetsarna. Läppen är grön med rödbruna toner och tydliga mörka nerver.

!Skötsel
Ge den intermediära eller varma temperaturer, hög luftfuktighet och en ljus skugga. Odla den i en väldränerad mix av medelgrov eller grov barkkompost och perlite eller sphagnum. Håll den jämnt fuktig, låt den inte torka ut.

!Synonymer
N/A

!Rekommenderad läsning
[[Dr. Tanaka's Home Page|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/Phrag/ennew8.html]] 2015-09-29
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:257826]] 2015-09-29









































































!Allmänt och utbredning
Den förekommer terrestriskt eller litofytiskt på branta klippsidor på sydvästra Java runt 300 meters höjd. De växer vanligen nära vattenfall i söderläge på klippor med mjuk, smulig kalksten och har sina rötter inbäddade i ständigt fuktiga mossor.
Den har uppkallat efter den indonesiska orkidéentusiasten och plantageägaren M. Moquette. Ofta anges den som //Paph. glaucophyllum// var. //moquetteanum// J.J. Sm. trots att den har erhållit status som egen art. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Cochlopetalum. Kromosomtalet är 2n=34.

!Utseende
Den bildar fyra till sex stycken mer än en halvmeter långa och runt nio cm breda, blad. Under våren och sommaren kommer en upptill 40 cm lång blomstängel som kan bära så många som 20 stycken blommor som öppnas successiva under flera månader med aldrig mer än två blommor öppna samtidigt. Blommorna blir drygt tio till tolv cm stora. Den dorsala sepalen är gulgrön med rödbruna prickar. Petalerna är ljust gulaktiga, vridna och med rödbruna fläckar och hår längs kanterna. Läppen är enfärgat mörkt rosa eller röd med en gul, övre kant. Staminoiden är rombformad med nedre halvan mörkt rödbrun och övre halvan gulgrön.

!Skötsel
Den vill ha en varm och ljus växtplats utan direkt sol, 20000 till 30000 lux. Den behöver en ordentlig temperatursänkning nattetid och sex till åtta veckor med temperaturer runt tio till 15 grader under vintern för att initiera blomning. I stort sett jämn vattning hela året, minska något under den svala viloperioden. Odla i väldränerad kompost med medelgrov bark, sphagnum och perlite med tillsats av kalk.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum glaucophyllum// var. //moquetteanum// J.J.Sm. (1906)
//Paphiopedilum victoria-regina// var. //moquetteanum// M.W.Wood (1976)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphmoquettianum.htm]] 2015-05-29
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/cochlopetalum/moquetteanum/index.html]] 2015-05-29



!Allmänt och utbredning
Arten är endemisk för nordvästra Ecuador där den växer litofytiskt mellan 500 och 1000 meters höjd, i samma habitat som [[Phrag. fischeri|929bf530-becb-4d73-9e75-e4b8b31ec662]] upptäcktes i ett drygt decennium innan //Phrag. andreettae// upptäcktes 1998.
Den är uppkallade för att hedra den numera bortgångne salesianerprästen med ett livslångt intresse för orkidéer, fader Angel M. Andreetta (1920-2011) som gett betydande bidrag till kunskapen om ecuadorianska orkidéer och som inspirerade Portilla-familjen att starta växtföretaget Ecuagenera.

!Utseende
Den bildar en rosett med upptill 15 cm långa och en till två cm breda, helgröna blad. Under vintern till våren kommer en upprätt eller hängande, 13 till 16 cm lång, grenad eller ogrenad blomstängel som bär två till fyra successivt öppna blommor. De sex cm stora blommorna är övervägande vita eller ljust rosa. Sepalerna är ljust rosa, petalerna vita med rosa nyanser på baksidan. Staminoiden är vit med en klargul mittpunkt. Läppen är rosa med lila och rosa prickar, och med en gul rand längs insidans bakre del.

!Skötsel
De växer i varma områden med mycket indirekt solljus. Plantorna behöver vattnas med rent vatten och en kompost som är fuktig utan att vara ständigt blöt men som aldrig heller får torka ut. De tål mycket vatten så länge komposten inte är alltför mycket nedbruten och de är känsliga för uppbyggnad av salter. Håll gödningen till ett minimum. Plantera i en väldränerad mix som ger god luftcirkulation, förslagsvis en blandning av sphagnum, kol och perlit eller medelgrov barkkompost med perlit. Tillsätt gärna lite kalk i komposten vid omplantering.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragandrettae.htm]] 2015-09-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Phragmipedium_andreettae]] 2015-09-28
[[Slipperorchids.info|http://www.slipperorchids.info/phragdatasheets/andreettae/index.html]] 2015-09-28
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=558]] 2015-09-28

;Phillip Cribb & Franco Pupulin, 2006
://A new Phragmipedium (Orchidaceae: Cypripedioideae) from Ecuador//, Lankesteriana International Journal on Orchidology, vol. 6, num. 1, april, 2006, pp. 1-4, ISSN: 1409-3871
:http://www.epidendra.org/LITERATURE/Cribb%20&%20Pupulin%202006%20Phragmipedium%20andreettae.pdf
:http://www.redalyc.org/pdf/443/44339810001.pdf
!Allmänt och utbredning
Arten är hemmahörande i Kina, Nepal, Assam, Myanmar/Burma, Vietnam, Korea, Ryukyuöarna och Taiwan där den växer epifytiskt och litofytiskt mellan 800 och 3000 meters höjd. Den sägs växa längre norrut, och därför vara mer köldtålig, än någon annan art inom släktet.
Under 1600-talets Japan använde den kejserliga familjen blomman för att parfymera sina kläder. De odlades då mer för sina vackra blad än för blommorna. I boken ''Chooseiso mitate kagami'', som kan översättas med "Uppslagsverk över //Dendrobium moniliforme//", publicerad av Aichi Shachu 1886 fanns 135 olika varianter avtecknad. Inom traditionell kinesisk medicin används den för att förlänga livet.
Taxonomiskt tillhör den sektionen Dendrobium, tillsammans med bland andra //[[D. nobile|d611e1c6-ab80-495f-a143-6b79c8230d90]]//, //[[D. wardianum|ad315a7c-9a48-4611-9982-2f60b45f445b]]// och //[[D. loddigesii|41e6b728-f976-4d2f-978d-cf27274cfb23]]//.

!Utseende
Den får långa, purpurgröna, upprätta eller hängande pseudobulber som sällan blir mer än 25 cm långa. Den tre till sex mm tjocka bulben är insvept i tunna, grå täckblad och indelad i flera noder, ungefär varannan cm. Noderna på mitten är tjockas för att smalna av mot ändarna. Alternerande på övre halvan av bulberna kommer långsmala blad, tre till sju cm långa och en dryg cm breda. Vissa varianter av arten har vita, gula eller till och med purpurfärgade kanter på bladen. När bulben åldras gulnar den och fäller sina blad. Från vintern till slutet av sommaren kommer korta blomstänglar från noderna på de i regel bladlösa äldre bulberna. Varje stängel bär en eller två stycken fyra cm stora, sött doftande blommor i färger från vitt, ljust gult, gulgröna, rosa, röda och purpur.

!Skötsel
Plantorna växer i svalt till intermediärt i halvskugga eller ljust utan direkt sol, 25000 till 35000 lux. I naturen kan den till och med utsättas för snö under vintern, men i odling rekommenderas inte temperaturer under nollan eller över 30 grader. Håll den fuktig och gödsla året runt. Den föredrar en väldränerad kompost av medelgrov barkkompost och sphagnum som hinner torkar ut mellan vattningarna. Den kan också med fördel odlas monterad på bark eller på det traditionella japanska sättet, insvept i en boll av långfibrig vitmossa, på samma sätt som för //[[Vanda falcata|bf6c8a9e-2dde-431d-b626-8cc756922fcc]]// och //[[Sedirea japonica|8209075e-84b2-4bd3-a810-884e94589662]]//. Under den svala vintervilan behöver de åtminstone en kort period, runt en månad, med mindre vatten och gödning.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum moniliforme// L. (1753)
//Epidendrum monile// Thunb. (1784) nom. illeg.
//Limodorum monile// Thunb. (1794)
//Callista moniliformis// Kuntze (1891)
//Dendrobium monile// Kraenzl. (1910) nom. illeg.
__Heterotypic Synonyms:__
//Epidendrum moniliferum// Panz. (1783)
//Onychium japonicum// Blume (1825)
//Dendrobium japonicum// Lindl. (1830)
//Dendrobium candidum// Wall. (1838)
//Ormostema albiflora// Raf. (1838)
//Dendrobium spathaceum// Lindl. (1858)
//Dendrobium castum// Bateman (1868)
//Callista candida// Kuntze (1891)
//Callista japonica// Kuntze (1891)
//Callista spathacea// Kuntze (1891)
//Dendrobium yunnanense// Finet (1897)
//Dendrobium zonatum// Rolfe (1903)
//Dendrobium wilsonii// Rolfe (1906)
//Dendrobium heishanense// Hayata (1914)
//Dendrobium kosepangii// C.L.Tso (1933)
//Dendrobium kwangtungense// C.L.Tso (1933)
//Dendrobium nienkui// C.L.Tso (1933)
//Dendrobium crispulum// Kimura & Migo (1936)
//Dendrobium taiwanianum// S.S.Ying (1978)
//Dendrobium tosaense// var. //chingshuishanianum// S.S.Ying (1989)
//Dendrobium moniliforme// var. //malipoense// L.J.Chen & Z.J.Liu (2008)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denmoniliforme.htm]] 2015-08-09
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dendrobium_moniliforme]] 2015-08-09
[[Plants and Japan|http://homepage3.nifty.com/plantsandjapan/page040.html]] 2015-08-09
[[New World Orchids|http://newworldorchids.com/neofinetia-care-sheet/dendrobium-moniliforme-culture-sheet/]] 2015-08-09
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=200028647]] 2015-08-09

















































!Allmänt och utbredning
//Paph. armeniacum// [paff-ee-oh-PEA-di-lum are-men-ee-AH-kum] växer naturligt som en kall- till svalväxande litofyt på norrsidan av kalkstensklippor i skuggiga bergsskogar mellan 1000 och 2000 meter över havet, i de västra och sydvästra delarna av Yunnan provinsen.
Den är medlem av ''Parvisepalum''gruppen och upptäcktes i Yunnan provinsen i sydvästra Kina så sent som 1979, och beskrevs tre år senare, 1982. Sedan den upptäcktes har den samlats i så stor omfattning att dess existens i det vilda redan nu är hotad.
Det latinska namnet refererar till aprikos, trots att de flesta blommorna är citrongula. Dess kinesiska namn ''Hsin Wang Dou Lan'' betyder bokstavligen "Gyllene Venussko" (eng. ''Golden Slipper Orchid'').

!Utseende
Arten är en liten planta som framför allt förökar sig med underjordiska utskott. Bladen är drygt två cm breda, upptill 15 cm långa och brokigt mönstrade med mörka och ljusa blågröna partier på ovansidan, och mörkt purpurfärgad på undersidan. Undersidan av bladet har även en kraftig och tydlig mittnerv.
Blomstängeln som kommer under senhösten till tidig vår, producerar endast en blomma som är stor, rund och klart svavelgul med en distinkt staminoid. Den kan bli mellan sex och 15 cm tvärsöver. Blommans klargula färgen gör arten unik inom släktet.
Blomknoppen bildas under sensommaren, men den behöver svala nätter, gärna ända ner till tio grader, under vintern för att gå i blom.

!Skötsel
De blommar som bäst när de får ljusa förhållanden med kalla nätter. Nattemperaturen under vintern rekommenderas så låg som ner till ett par grader över nollan, och dagtid upp till 15 grader. Under sommaren föredrar de en temperatur runt 20 till 24 grader under dagen och ner till 16 grader under natten.
I sitt naturliga habitat utsätts plantan för en distinkt torrperiod, men //Paph. armeniacum// behöver antagligen inte någon lång viloperiod. átminstone en eller två månader med låga temperaturer och minskad vattning är gynnsamt för att plantan inte ska växa ihjäl sig. De bör inte utsättas för direkt sol, men gärna ordentlig luftcirkulation. De frodas i den svala, fuktiga luftströmmen från en luftfuktare.
Plantorna bör hållas jämnt fuktiga under tiden de växer aktivt och något torrare under höst och vinter, men de bör aldrig tillåtas torka ut helt. Gödning var eller varannan vecka under tillväxten, med halv till en fjärdedel av den rekommenderade näringsdosen. Gärna kväverik näring (30-10-10) om plantan växer i barkkompost. Vissa odlare rekommenderar en kvävefattig och fosforrik näring under hösten för att gynna blomningen påföljande säsong.
Liksom medlemmar av gruppen ''Brachypedalum'' kan den inte fördrar salt i rotzonen, utan en bra vattenkvalité och regelbunden genomsköljning av komposten krävs för god tillväxt.
Eftersom den nya tillväxten kommer på långa rhizom upptill 15 cm från moderplantan är de svåra att odla i kruka. Det bästa är hängande korgar fodrade med mossa. Om de odlas i kruka bör den vara minst dubbelt så bred som djup, annars kommer komposten förbli alltför blöt och plantan ruttna. En fin eller medium grov barkkompost med perlite, finfördelad mossa eller någon annan vattenhållande komponent är det som oftast föreslås. Eftersom de i naturen växer på kalkstensklippor kan man gärna tillsätta lite kalk till komposten. Vid omplanteringen bör knutpunkten mellan rötterna och stammen hamna någon cm under kompostens nivå.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum armeniacum// var. //mark-fun// Fowlie (1987)
//Paphiopedilum armeniacum// var. //markii// O.Gruss (1997)
//Paphiopedilum armeniacum// f. //markii// Braem (1998)
//Paphiopedilum armeniacum// var. //parviflorum// Z.J.Liu & J.Yong Zhang (2001)
//Paphiopedilum armeniacum// var. //undulatum// Z.J.Liu & J.Yong Zhang (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/papharmeniacum.htm]]
[[Phils ORchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_parvisep.htm#arm]]
[[OrchidSpeciesCulture|http://www.orchidculture.com/COD/FREE/Paph_arm_Art.html]]
[[AntecLaboratory & LadyslipperFarm|http://www.ladyslipper.com/0129-04.htm]]






































































































































!Allmänt och utbredning
Det är en miniatyrart från Belize till Peru och Brasiliens fuktiga regnskogar. Den växer från havsnivån till 1300 meters höjd.

!Utseende
Plantan har ett krypande, kuddliknande växtsätt. Den har små pseudobulber med runda, pennliknande blad.
Blomstängeln är kort och bär en ensam blomma under sommaren till hösten. Blommorna varierar från rent vitt till rosa eller grönt, ofta med rödaktiga nerver.

!Skötsel
Odla den monterad eller i en fin blandning av vitmossa, bark och trädormbunke. Ge den en sval till varm placering i halvskugga och jämna förhållanden hela året.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria uncata// Lindl. (1837)
//Camaridium uncatum// Hoehne (1951)
__Heterotypic Synonyms:__
//Maxillaria nana// Hook. (1841)
//Maxillaria squamata// Barb.Rodr. (1877)
//Ornithidium squamatum// Barb.Rodr. (1882)
//Ornithidium nanum// Rolfe (1894)
//Maxillaria stenostele// Schlechter (1918)
//Maxillaria striatella// Kraenzl. (1928)
//Camaridium squamatum// Hoehne (1947)
//Christensonella squamata// S.Koehler (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxuncata.htm]]
[[Orchids Online|http://www.orchidsonline.com.au/interactive/node/1918]]
[[Abundaflora|http://www.abundaflora.com/max_uncata.htm]] bild




















!Allmänt och utbredning
Arten är en medelstor epifyt som härstammar från Lang Bien Mountains nära Dalat, ungefär 240 km nordost om Ho Chi Minh City (tidigare Saigon) i Vietnam (tidigare Annam) där den växer mellan 1200 och 1300 meters höjd över havet.
Som för de flesta orkidéarter från Vietnam är habitatinformation som finns tillgängligt ganska mager.

!Utseende
De ungefär fyra dm långa mörkgröna bladen sitter parvis i toppen av de koniskt äggformade, fem till åtta cm höga pseudobulberna.
Blomstängeln utvecklas från toppen av bulben, mitt mellan bladen hos det nya skottet i samband med att skottet växer till på våren eller under försommaren. Stänglarna på den här arten är helt raka, fyra till fem dm långa. På stängeln kommer tre till åtta snövita, tio cm stora doftande blommor som öppnas simultant.
Blommorna har en vackert gyllengul till orange behåring i läppen som gör arten till en av de vackraste inom släktet. Om plantan står torrt och svalt kan blommorna hålla fyra till sex veckor.
Tillsammans med //[[Coel. crista|5b87f6d8-ad59-4ff6-9544-80ef79a6f7d6]]// och //[[Coel. mossiae|9c123073-ba4d-4ee8-8e2f-05c3584f6162]]// har //Coel. mooreana// de största blommorna i släktet.

!Skötsel
Växten odlas bäst i grunda krukor i en öppen blandning av bark och sphagnum. Som många coelogynearter trivs de bäst om de inte störs av omplanteringar för ofta. De kan ofta sura ett par år innan de börjar blomma igen.
Extremtemperaturen på 1200 meters höjd som //Coel. mooreana// är van vid, kan ligga mellan 30 grader under dagen och ner till plus fem på natten, men under dagen sommartid ligger den vanligen runt 25 grader för att sjunka till 17 grader på natten. Under vintervilan går nattemperaturen ner ytterligare fem grader med en bibehållen dagstemperatur.
På den höjden är växten också van vid kraftig luftcirkulation och stark sol. Under sommaren ger tjocka molnskikt viss skugga, så vintern är den ljusaste perioden för plantan i naturen. I odling bör de vintertid få så mycket ljus som växten kan tåla utan att bränna bladen.
De bör vattnas kraftigt under tillväxtperioden, nästan utan att torka upp alls mellan vattningarna. På hösten efter att de nya bulberna är färdigväxta bör vattningarna reduceras för att under vintern begränsas till bara tillfälliga lätta vattningar och morgonduschar. Om bladspetsarna på unga skott blir bruna eller om bulberna börjar skrumpna, kan vattningen ökas. Bladen på gamla bulber kan naturligt börja vissna och dö under hösten, men spetsarna på nya blad bör vara gröna. Likaledes bör en lätt skrumpning förekomma på de nya bulberna. För mycket skrumpning indikerar att växten behöver vatten, men om de inte skrumpnar alls betyder det att plantan antagligen inte kommer att blomma på grund av för mycket vatten.
När rötterna börjar växa under våren kan vattningen öka igen. Under tillväxtperioden bör de få en fjärdedel till halva den rekommenderade dosen gödning. Den anses som en av de lättaste av arterna i släktet att odla och att få i blom.

!Synonymer
__Heterotypic Synonyms:__
//Coelogyne psectrantha// Gagnepain (1930)
//Coelogyne mooreana// f. //alba// Roeth & O.Gruss (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelmooreana.htm]]
[[OrchidSpecies Culture|http://www.orchidculture.com/COD/FREE/Coel_Art.html]]




!Allmänt och utbredning
Arten återfinns i fuktiga molnskogar på östliggande sluttningar i södra Ecuador mellan 1000 och 2400 meters höjd.
Artepitetet kommer från grekiskans ''deleastes'' som kan översättas med "frestaren", som anspelar på den förmodade funktionen på bihanget på läppen.

!Utseende
Det är en miniatyrepifyt med blad på två till sex cm långa stjälkar omgivna av sex till 13 mikroskopiska täckblad. Bladen blir ovala, två till tre cm stora och drygt en och en halv cm breda och smalnar abrupt av mot bladbasen. Under vintern och våren kommer blommorna successivt en och en på en stängel från bladfästet mot stjälken och ligger längs översidan av bladet. Blommorna blir upptill fem mm stora men vanligen mindre. Sepalerna är purpur med en gul kant, petalerna orange med en röd kant och läppen i purpur.

!Skötsel
De vill ha mycket hög luftfuktighet, gärna en bit över 70% för att den ska trivas. De bör odlas monterad, i sval till intermediär temperatur, som lägst 14 grader under natten till max 25 grader under dagen. Som de flesta arter inom släktet är den känslig för mineralsalter och bör därför vattnas med regn- eller R/O-vatten.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lepdeleastes.htm]]
























































































!Allmänt och utbredning
Arten växer i fuktiga molnbergsskogar i Colombia, Venezuela, Ecuador, Peru och Bolivia mellan 500 och 3100 meters höjd.
Artepitetet anspelar på bladens hjärtform.

!Utseende
Det är en medelstor art som växer terrestriskt, litofytiskt eller epifytiskt längs vattendrag. Den saknar pseudobulber utan de hjärtformade bladen kommer på en kort, upprätt bladstjälk från en underjordisk stam. De centimeterstora blommorna kommer under sommaren många i tät följd på blomställningen liggande ovanpå bladskivan vid basen av bladet.

!Skötsel
Odla plantan i halvskugga under svala förhållanden. Plantera den i en kompostmix av fin barkkompost med perlit eller sphagnum. Vatten regelbundet och hålla komposten fuktig.

!Synonymer
__Homotypic Synonyms:__
// Humboltia cordata// Ruiz & Pavon (1798)
//Stelis cordata// Willd. (1805)
//Acronia cordata// Luer (2005)
__Heterotypic Synonyms:__
//Pleurothallis monocardia// Rchb.f. (1855)
//Humboltia monocardia// Kuntze (1891)
//Pleurothallis cardiophylla// Schlechter (1915)
//Pleurothallis rhopalocarpa// Schlechter (1922)
//Pleurothallis cordifolia// var. //rhopalocarpa// T.Hashim. (1978)
//Zosterophyllanthos monocardius// Szlach. & Marg. (2001)
//Acronia cordata// subsp. //rhopalocarpa// Luer (2005)
//Zosterophyllanthos rhopalocarpus// Szlach. & Kulak (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurcordata.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Pleurothallis_cordata]]





























!Allmänt och utbredning
Detta är en terrestrisk art som växer i subtropiska låglandsskogar i Kina och norra Vietnamn, upptill 2300 meters höjd. Den föredrar humusrika jordar i svala, fuktiga skrevor eller i dimfuktade jordar längs floder och bäckar. 
Dess japanska namn ''Housairan'' betyder "orkidé som inleder det nya året" (eng. ''orchid that tells the New Year''). Den blommar nämligen vid det japanska nyåret enligt den gamla kalender, tidigt i februari.

!Utseende
Det är en liten art med ett kompakt växtsätt där de ovala pseudobulber bär långa, smala, mörkgröna blad. Blomstängeln höjer sig rakat upp över bladen. Den kan bli upptill 80 cm lång och bära dussintals myskdoftande blommor som är ungefär fem cm stora. Blommorna är antingen gulgröna eller rent röda med en röd läpp fläckad i purpur. Blommorna kommer i början av året, under januari eller februari.

!Skötsel
//Cym. sinense// växer bäst i en öppen, väldränerad kompostmix i en hög, smal kruka. Den föredrar en skuggig eller halvskuggig växtplats under hela året. Lättast är att se på bladen om plantan får tillräckligt med ljus. Bladen ska ha en kraftigt grön färg. Bladen bränns lätt, så håll plantan inomhus på en sval plats hela året. Om luftfuktigheten och vattning är riktig kan den tolerera en högre temperatur. Den vill inte ha någon gödning från slutet av augusti fram till dess att blommorna öppnas. Vintertid behöver den en temperatur på minst fem grader. Vid svala temperaturer måste vattningen minskas. Den odlas annars ungefär som en //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]//.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum sinense// Jacks. (1802)
__Heterotypic Synonyms:__
//Cymbidium fragrans// Salisbury (1812)
//Cymbidium chinense// Heynh. (1846)
//Cymbidium hoosai// Makino (1902)
//Cymbidium hoosai// f. //hakuran// Makino (1902)
//Cymbidium albojucundissimum// Hayata (1914)
//Cymbidium sinense// var. //margicoloratum// Hayata (1916)
//Cymbidium sinense// f. //albojucundissimum// Fukuy. (1932)
//Cymbidium sinense// var. //albojucundissimum// Masam. (1933)
//Cymbidium sinense// f. //margicoloratum// Fukuy. (1936)
//Cymbidium sinense// var. //album// T.C.Yen (1964)
//Cymbidium sinense// f. //aureomarginatum// T.C.Yen (1964)
//Cymbidium sinense// var. //bellum// T.C.Yen (1964)
//Cymbidium sinense// f. //viridiflorum// T.C.Yen (1964)
//Cymbidium sinense// var. //pallidiflorum// S.S.Ying (1987)
//Cymbidium sinense// var. //taiwanianum// S.S.Ying (1987)
//Cymbidium sinense// f. //pallidiflorum// S.S.Ying (1990)
//Cymbidium sinense// f. //taiwanianum// S.S.Ying (1990)
//Wutongshania guangdongensis// Z.J.Liu & J.N.Zhang (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cymbsinense.htm]]
[[Annals of Botany|http://aob.oxfordjournals.org/cgi/reprint/78/1/105.pdf]] Embryology of //Cym. sinense//













!Allmänt och utbredning
//Paph. callosum// är en medelstor terrestrisk eller ibland litofytisk art som förekommer i Thailand, Kambodja, Vietnam, Laos och nordvästra delen av den malaysiska övärlden. Där växer de längs floder på silikatrika jordar i täta städselgröna låglandsskogar eller höglandsmolnskogar på granit eller sandstensbäddar mellan 300 till 2000 meters höjd. Eftersom den har ett stort temperaturspann och distributionsområde uppvisar den en stor variation och ett antal varianter har beskrivits. Tidigare var den vanlig i åtminstone Thailand, men tyvärr har den blivit alltmer sällsynt i naturen och nästan alla kända populationer är mer eller mindre förstörda. Eftersom den växer på relativt låg höjd har den varit lätttillgänglig och mer utsatt för mänsklig påverkan.
Troligen pollineras //Paph. callosum// av en slags rovfluga som misstar de mörka vårtorna på petalerna för bladlöss.
Artepitetet kommer från latinets ''callosus'' som kan översättas med "tjockt skinn".

!Utseende
De får tre till fem kraftigt grågröna blad, mönstrade i mörka och ljusa gröna nyanser. Bladen blir tre till fem cm breda och upptill 20 cm långa. Blomman, eller väldigt sällan två blommor, kommer på en mer än 30 cm lång, luden, lila blomstängel. Blomman blir drygt tio cm stor och i naturen kommer den vanligen mellan april till maj. Den kan håll sig fräsch i över en månad men doftar tyvärr inte. Grundfärgerna är rödbrun och grönt, med vitrandig rödbruna övre sepal och rödbrun läpp.

!Skötsel
Plantan bör odlas i måttligt starkt ljus och varm temperatur, gärna mellan 19 till 24 grader. Håll den jämnt fuktig, ganska skuggigt hela året. I dess naturliga habitat är november till mars de torraste månaderna och maj till september de blötaste. Odla i små krukor med en väldränerad mix som medelgrov barkkompost, sphagnum och perlite, som håller fukten utan att vara konstant blöt. Vatten regelbundet ungefär var fjärde till femte dag. För att inducera blomning, minska vattningen under vintern och våren.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium callosum// Rchb.f. (1886)
//Cordula callosa// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphcallosum.htm]]
[[Orchid Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_callosum]]
[[Vietnam Plant Data Center|http://www.botanyvn.com/cnt.asp?param=news&newsid=1214&lg=en]]

































!Allmänt och utbredning
Släktet //Vanda// innehåller <$view field="count"/> av världens vackraste orkidéarter och några av de ovanliga blå orkidéerna i odling idag.
De växer naturligt i Himalaya, Australien och vissa delar av Nya Guinea. De flesta av arterna är epifytiska och växer på trädstammar eller - grenar, som ger deras rötter möjlighet att komma åt luftens fuktighet. Några få är terrestra eller litofytiska. Släktet anses tillhöra de mest utvecklade av alla orkidéer inom Orchidaceae.
Namnet kommer från sanskrits ord för arten //[[V. tessellata|5b09d588-de18-43d3-a4b9-ceecb4c4cf3c]]//.

!Utseende
De kan växa till stora plantor mer än en meter höga. Bladen bör vara gröna, inte gulaktiga eller mörkt grön. Om bladen är rödaktiga kan det indikera för mycket ljus.
En välväxt planta kan blomma två eller tre gånger per år, och producerar tre eller fyra stycken decimeterstora blommor på varje stängel. Blommorna uppfattas i allmänhet som platta och runda eftersom både petaler och sepaler är lika stora. Blommorna kommer i starka färger från vitt, gult, grönt, orange och rött, såväl som blått.

!Skötsel
Detta är knappast ett släkte för nybörjaren. De odlas oftast i korgar eller monterade med rötterna hängande. Det tillåter ett snabbt dränage av vattnet. Om de ska odlas i kruka, välj en väldigt öppen barkmix, inte kompost.
De tycker om varm luft och hög luftfuktighet. De är däremot känsliga för etylengas, så håll dem borta från mognande frukt, grönsaker och döende blommor.
Under vintern bör temperaturen inte understiga 18 grader och sommartid inte överstiga 35 grader. Försök också ge dem sex till tolv graders temperaturskillnad mellan dag och natt.
Vandor älskar sol och klarar full sol hela dagen, men de föredrar ett intensivt men indirekt ljus så inte bladen bränns. Vissa arter kräver tre till fyra timmar med direkt sol för att blomma. Om knopparna gulnar, vissnar och faller av innan de öppnas hänger plantan för mörkt. I vardagsodling bör de alltid flyttas med ljuset för att få det för årstiden ljusaste fönstret.
De föredrar också mycket vatten under tillväxtperioden, juni till september, och om de odlas i korg eller monterade måste de vattnas varje dag. Resten av året bör de inte få torka ut utan hållas jämnt fuktiga. Efter blomningen är det bäst att de får en kort vila på två eller tre veckor, då de tillåts torka ut lätt mellan varje vattning. Under tillväxten ges halv dos gödning varannan vecka. Under hösten och vintern räcker en fjärdedels dos en gång i månaden.
Dessa växter tycker inte om att bli störda när de väl har etablerat sig. Plantorna kan se skräpiga ut efter ett par år med mycket luftrötter, men det är då de kan producera som mest blommor. Plantera om dem med måtta annars kan blomningen utebli.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Vandeae
''Undertribus'': Aeridinae

''Typart''
//[[V. tessellata|5b09d588-de18-43d3-a4b9-ceecb4c4cf3c]]// Hooker (1830)

''Uttal''
VAN-dah

''Synonymer''
__Heterotypic Synonyms:__
//Ascocentrum// Schltr. (1913)
//Euanthe// Schltr. (1914)
//Finetia// Schltr. (1918) nom. illeg.
//Neofinetia// Hu (1925)
//Nipponorchis// Masam. (1934) nom. illeg.
//Eparmatostigma// Garay (1972)
//Trudelia// Garay (1986)
//Trudelianda// Garay (1986)
//Christensonia// Haager (1993)
//Ascocentropsis// Senghas & Schildh. (2000)
//Gunnaria// S.C.Chen (2009)

!Rekommenderad läsning
[[Internet Orchid Photo Encyclopedia|http://www.orchidspecies.com/vanda.htm]]
[[Easy Orchids|http://www.easyorchids.co.uk/site/content/view/25/48/]]
[[Canadian Orchid Society|http://www.canadianorchidcongress.ca/cculture/vanda.html]]
[[American Orchid Society|http://aos.org/aos/uploadedfiles/docs/cultureintermedvanda.pdf]] PDF
[[Wikipedia|http://en.wikipedia.org/wiki/Vanda]]




























!Allmänt och utbredning
Arten återfinns i svala bergsregnskogar och molnskogar från 1700 till 2500 meters höjd över havet från delstaten Chiapas i sydöstra Mexico till Guatemala.

!Utseende
De ovala pseudobulberna är upptill tio cm stora, fårade och tillplattade från sidorna. I toppen bär de två avlånga blad som kan bli över en halv meter långa. Från toppen av bulben kommer också en meterlång, grenad blomstängel med många doftande, sex cm stora blommor under sommar och höst. Sepaler och petaler är gulgröna med ränder i purpur och brunt medan läppen är mörkt lila i mitten som övergår i ljust lila mot nederkanten av läppen.

!Skötsel
Den behöver en sval eller intermediär växtplats i halvskugga. Vattna och göd regelbundet under tillväxtperioden men låt komposten torka upp mellan vattningarna. Som de flesta andra oncidier kräver den inte lika hög luftfuktighet som många andra orkidéer för att trivas utan den klarar sig bra i vanlig rumsmiljö med en relativ fuktighet mellan 30 till 60 procent.
Den behöver en torr vintervila, helt utan vatten, för att säkerställa en lyckad blomning nästföljande säsong.
Omplanteringen bör göras när den nya bulben är halvt färdigväxt, vilket vanligen är under våren. Odla i en väldränerad medelgrov kompost. Håll luftfuktigheten hög och komposten torr tills nya rötter börjar framträda.

!Synonymer
__Homotypic Synonyms:__
//Odontoglossum laeve// Lindley (1844)
//Miltonia laevis// Rolfe (1904)
//Miltonioides laevis// Brieger & Lückel (1983)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/onclaeve.htm]]
[[Orcheeder|http://www.orcheeder.com/orchids/generas/oncidium-laeve/7793/tips/]]
[[Growing Orchids for Beginners|http://growing-orchids-for-beginners.blogspot.se/2010/11/odontoglossum-laeve.html]]

















































!Allmänt och utbredning
Denna miniatyrart är hemmahörande i västra Ecuadors varma, fuktiga molnskogar mellan 300 och 1300 meters höjd.
Namnet kommer från det latinska ''saltatrix'', "en kvinnlig dansare" som hänvisar till blommans eteriska utseendet. Taxonomiskt tillhör den undersläkte Lepanthes sektion Lepanthes undersektion Lepanthes serie Lepanthes.

!Utseende
Den saknar pseudobulber utan bladstjälkarna kommer direkt från en underjordisk stam. Den drygt fem cm långa bladstjälken är vid basen omsluten av sju eller åtta tunna täckblad. Själva blad är hjärtformat, knappt tre cm långt och under våren kommer en centimeterlång blomstängel på ovansidan av bladskivan. Stängel producerar bara en tre mm stor blomma åt gången och blommorna håller knappt en vecka men stängeln kan bilda nya blommor efter varandra under mer än en månad. De orange och röda blommorna liknar de hos //[[Lths. calodictyon|6a69ac2a-fcff-4ecd-8e2c-89181f2dca1f]]// men de hjärtformade, nätmönstrade bladen är gröna till blekt lavendelfärgade, bladen är ludna utan större borst längs kanterna och blommans läpp är dubbelt så stor som hos //[[Lths. calodictyon|6a69ac2a-fcff-4ecd-8e2c-89181f2dca1f]]//.

!Skötsel
De föredrar en varm, skuggig, ständigt fuktig växtplats med hög luftfuktighet och med liten luftcirkulation. Odla dem monterade med sphagnum runt rötterna eller i små krukor med sphagnum. Håll dem ständigt fuktig, låt den inte torka ut, den har inga reserver att ta av.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lepsalatrix.htm]] 2015-11-02
[[The Pleurothallid Alliance |http://www.pleurothallids.com/index.php?option=com_content&view=article&id=689&Itemid=58]] 2015-11-02






















!Allmänt och utbredning
Arten är endemiskt förekommande på Filippinerna runt 1400 meters höjd över havet. Den beskrevs så sent som 1996 av Garay, Senghas och Lemcke.

!Utseende
Det är en liten planta som blir mindre än sex cm stor. Pseudobulberna är centimeterstora och koniska. Blomstängeln som kommer under sommaren eller hösten kan bli drygt tio cm lång och den ensamma blomman runt fem cm.

!Skötsel
Odla den varmt och fuktigt, gärna 60 till 80 procent luftfuktighet. Ge den ljus skugga och lätt luftcirkulation. Den verkar frodas monterad på trädormbunke. Under sommaren kan den klara över 30 graders värme på dagarna om luftfuktigheten är tillräcklig, och ner till 15 grader under nätterna. Vintertid kan den fördrar en variation över dygnet mellan tio och 25 grader. Den behöver få en daglig vattning, framförallt när det är varmt.
Den verkar vara en relativt enkel art att odla. När den väl etablerat sig växer den snabbt till en ordentlig planta.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbwoelfilae.htm]]
[[Bulbophyllum.com|http://www.bulbophyllum.com/gallery2/main.php/v/Bulbophyllum/woelfliae/]] bilder
































































!Allmänt och utbredning
//Oncidium// är ett variabelt släkte med <$view field="count"/> arter från Syd-, Central- och Nordamerika. De flesta växer som epifyter med enstaka terrestriska arter, från havsnivå till över 4000 meters höjd.
Det grekiska ''onkos'' som betyder "uppsvälld" anspelar på den vårtiga callusen på läppen hos alla oncidier.

!Skötsel
Den stora variationen gör det svårt att generalisera, men de flesta arterna föredrar en ljus, sval placering utan direkt solsken och bra luftcirkulation. Många oncidier kräver mindre luftfuktighet än andra orkidéer. De växer bra i plastkrukor med mossa eller en fin barkkompost.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//[[Onc. altissimum|13213a31-9724-456a-8aa5-3f06113fa870]]// Swartz (1800)

''Uttal''
on-SID-ee-um

''Synonymer''
__Heterotypic Synonyms:__
//Odontoglossum// Kunth (1816)
//Xeilyathum// Rafinesque (1837)
//Sigmatostalix// Rchb.f. (1852)
//Cochlioda// Lindl. (1853)
//Miltoniastrum// Lindl. (1853)
//Petalocentrum// Schltr. (1918)
//Roezliella// Schltr. (1918)
//Symphyglossum// Schltr. (1919) nom. cons.
//Mexicoa// Garay (1974)
//Miltonioides// Brieger & Lückel (1983)
//Solenidiopsis// Senghas (1986)
//Chamaeleorchis// Senghas & Lückel (1997)
//Collare-stuartense// Senghas & Bockemühl (1997)
//Matalbatzia// Archila (1999) nom. inval.
//Heteranthocidium// Szlach., Mytnik & Romowicz (2006)

!Rekommenderad läsning
[[Brazilian Orchids|http://www.delfinadearaujo.com/generos/oncidium/pages/intro2.htm]]














!Allmänt och utbredning
Arten förekommer terrestriskt på sandiga jordar och sandstensklippor i höglänta molnskogar från norra Thailand och Vietnam till Hainan, den sydligaste provinsen av Kina, mellan 1000 och 2600 meters höjd.
Arten pollineras av humlan //Bombus eximius//.

!Utseende
Det är en storväxt art med ovala, från sidan tillplattade, pseudobulber som kan bli tio cm stora. De bär sex till tio smala, 70 cm långa blad som gå ihop fem till 15 cm från basen mot bulben. Den upprätta blomstängeln som kommer när temperaturen sjunker under september och oktober, kan bli närmare en och en halv meter lång med upptill 30 blommor i en gles klase. De vaxartade, doftlösa blommorna blir upptill nio cm stora med nyanser i vitt och rosa och en läpp täckt av mörkröda markeringar.

!Skötsel
I naturen växer den svalt till varmt, ofta i skuggan under låga buskar, så ge den en halvskuggig plats utan direkt sol, 25000 till 35000 lux. Dagtid kan temperaturen få gå upp till 26 grader men den behöver en period under hösten med svalare nattemperaturer för att initiera blomningen. Låt inte temperaturen gå under tio grader.
Använd en väldränerad kompost med mycket sand eller grus och en hög andel organiskt material.
Vattna rejält, ofta, två till tre gånger i veckan, med svag gödning under sommaren för att främja bästa tillväxten. Den klarar inte att rötterna är ständigt blöta så låt komposten torka upp lätt mellan vattningarna. Den kan med fördel stå utomhus under sommaren.

!Synonymer
__Homotypic Synonyms:__
//Cyperorchis insignis// Schlechter (1924)

!Rekommenderad läsning
[[Cymbidium Species|http://www.cymspecies.com/insigne.htm]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cyminsigne.htm]]
[[Leran2Grow|http://www.learn2grow.com/plants/cymbidium-insigne/]]

























!Allmänt och utbredning
Det finns <$view field="count"/> arter av detta ganska okända släkte från Brasilien. De återfinns framförallt i centrala och södra delarna av Brasilien där de växer som små epifyter i fuktiga skogar.
De beskrevs första gången 1843 av Lindley som namngav släktet efter Promeneia, en gång grekiska prästinna hos Zeus-oraklet i Dodona.
Släktet delas in i tre sektioner: ''Promenaea rollinsonii'', ''Promenaea xanthina'' och ''Promenaea stapelioides'' sektionerna.
<$reveal type="nomatch" state="$:/temp/state-5ad1d667-9c99-4285-b886-7665e56a2b62" text="show">
<$button set="$:/temp/state-5ad1d667-9c99-4285-b886-7665e56a2b62" setTo="show">visa mer info om sektionerna</$button></$reveal>
<$reveal type="match" state="$:/temp/state-5ad1d667-9c99-4285-b886-7665e56a2b62" text="show">

;Promenaea rollinsonii
://[[Prom. lentiginosa|2a40c76e-fbc1-4264-9642-d85ec5ef7330]]//
://[[Prom. riograndensis|a74419a8-4fb7-4146-a6d7-3eb73bb0b6cd]]//
://[[Prom. rollinsonii|b0a8ffbe-3bb7-4d79-9dd3-96fee634f573]]//
;Promenaea xanthina
://[[Prom. acuminata|08efa566-1aff-4af0-b429-227a5bcd02d8]]//
://[[Prom. albescens|3b0c76a2-7be3-4598-ab8d-6422749c280b]]//
://[[Prom. catharinensis|631087df-97e5-4b18-b9e7-2a52e79f914f]]//
://[[Prom. dusenii|ce5a0aaa-444c-4cfd-b5cc-327707978c04]]//
://[[Prom. fuerstenbergiana|6b3c5efe-5f1b-4ae7-8445-a11f7d0ce211]]//
://[[Prom. guttata|b5789133-d66d-43ec-b713-901ac0359261]]//
://[[Prom. malmquistiana|310cfaa1-43cb-43ff-b8c0-781df95fe15a]]//
://[[Prom. microtera|202b91c4-8d80-4fac-b674-8132b6127bd2]]//
://[[Prom. ovatiloba|008b509b-a231-440c-89f2-d9368ddabb12]]//
://[[Prom. paranensis|f96a2c3a-75b0-40d8-a900-86c88e99eb17]]//
://[[Prom. xanthina|865dc654-7604-49ed-964c-70be3e79a5fe]]//
;Promenaea stapelioides
://[[Prom. stapelioides|5c43e855-5152-4205-8cbe-b9ccbe0fdc48]]//

<$button set="$:/temp/state-5ad1d667-9c99-4285-b886-7665e56a2b62" setTo="hide">dölj</$button>

</$reveal>

!Utseende
De är småväxta, oftast inte högre än tio cm. Bulberna som är endast två cm stora, är nästan fyrkantiga. De mjuka bladen som kommer i par från toppen av bulben är ofta inte längre än sju cm. På våren kommer en blomstängel som är i storlek med bladen eller kortare från basen av de nya bulberna, och med en till två blommor per stängel.
Blommorna hos //Promenaea// är drygt fem cm stora och oftast klart gula med en svag teckning i rödbrunt men även mera färgstarkt tecknade blommor kan förekomma och vissa kan dofta mycket gott. Eftersom stänglarna är hängande gör sig släktet bäst i hängande korgar.

!Skötsel
De odlas med fördel i små krukor eller hängande korgar, under svala till varma, fuktiga förhållanden. Använd en luftig, väldränerade men fuktighetshållande kompost, lämpligen en fin barkkompost med en stor andel grus eller leca och finfördelad vitmossa. Var varsam med vattningen då de lätt kan drabbas av röta. Samtidigt får de inte vara torra under lång tid. Var även försiktig med duschning för att undvika fula fläckar på bladen.
De fordrar en skuggig plats liknande de för //[[Zygopetalum|e0e5822a-0ab4-4a2b-aa9d-c20f86f7378d]]//, om de får för mycket ljus skiftar bladen och bulberna över i ljusgrått. De tål inte alltför låga temperaturer under vinter. Göd med svag näring varje vattning under sommaren när de tillväxer, och omplantera vartannat år efter som de inte kan fördra om komposten börjar brytas ner.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Zygopetalinae

''Typart''
Lindley använde ett flertal olika arter när han skapade släktet

''Uttal''
pro-men-EYE-ah

''Synonymer''
N/A

!Rekommenderad läsning
[[Florafest|http://www.orchideensammlung.de/gattungen/promenaea/florafest.htm]]
[[OrchidéHuset|http://www.orchidehuset.se/Arkiv/Promenaea%20xanthina%20artikel.htm]]























!Allmänt och utbredning
Arten är känd från en enda insamling i bergskedjan Cordillera del Condor i provinsen Zamora-Chinchipe i sydöstra Ecuador runt 1500 meters höjd.
Den liknar //[[Rstp. flosculata|77189c32-0b39-42c1-bd3f-843a638e82b1]]// från norra Ecuador och Colombia, men //Rstp. mendozae// har större blommor med proportionellt större läpp.
Namnet har den fått efter den numera bortgångne orkidéntusiasten Hartman Mendoza från Vilcabamba, Ecuador, som upptäckte arten 1992.

!Utseende
Den saknar pseudobulber och hela plantan blir mellan tio och 20 cm hög, med bladskaften som kommer från den underjordiska stammen knappt tio cm långa. Skaftet är vid basen omslutet av åtta tunna, vita täckblad och bär ett ensamt blad i toppen. Bladet är smalt avlångt i mörkgrönt, åtta cm långt och två cm brett. På ovansidan av bladet kommer under sommaren en kort, smal, upprätt blomstängel som bär en ensam, två cm stor blomma som håller en vecka till en månad. Synsepalen är klart citrongul, översållad med röda prickar och med en helt gul läpp.

!Skötsel
Håll plantan i ljus skugga eller halvskuggigt, mindre än 10000 lux, med hög luftfuktighet. De kan odlas svalt eller i intermediär temperatur, 14 till 24 grader. Plantera förslagsvis om den vartannat år i en mix av fin barkkompost och perlite eller hackad sphagnum eller i ren sphagnum. Vattna regelbundet och håll den fuktig. Den är lättodlad men verkar inte bilda keikis speciellt lätt.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/resmendozae.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_mendozae]]
[[Epidendra|http://www.epidendra.org/taxones/Restrepia/Restrepia%20mendozae/restrepia%20mendozae.pdf]]





































!Allmänt och utbredning
Den växer terrestriskt eller litofytiskt i mossan mellan trädrötter eller klippskrevor nära rinnande vatten i de fuktiga molnskogarna i östra och centrala delarna av bergskedjan Cordillerna i Colombia mellan 1200 och 2100 meters höjd.
Arten är lätt att särskilja från andra arter inom släktet. Den enda som är något så när likartad är //[[Phrag. fischeri|929bf530-becb-4d73-9e75-e4b8b31ec662]]// men som har en helt annorlunda staminoid.
Den är uppkallad efter den kände Lindens halvbror, belgiske orkidésamlaren Louis Joseph Schlim som upptäckte arten i februari 1852 nära Ocaña i dåvarande New Granada, nuvarande Colombia. Taxonomiskt tillhör den sektion Micropetalum. Kromosomtalet är 2n=30.

!Utseende
Det är en medelstor art som saknar psudobulber utan bildar en solfjäder med fyra till sex stycken tio till 30 cm långa, två eller tre cm breda, ljusgröna blad, ibland purpurfärgad mot basen. När som helst under året men framförallt under hösten kommer en upptill 30 cm lång, grenad eller ogrenad, blomstängel som kan producera en till tio stycken svagt doftande blommor. Blommorna blir mellan fyra och sju cm stora i färger från nästan helt vitt till ljust rosa eller intensivt rosa med nyanser av rött och öppnas bara en i taget. Det sägs att plantorna från den västra delen av utbredningen ger blommor med ljusare färger, medan plantor från den östliga delen ger mer intensivt färgade blommor. Petalerna är breda, nästan runda och liknar sepalerna men är större. Staminoiden är gul med två rödlila fläckar mot basen.

!Skötsel
I sitt naturliga utbredningsområde har de en eller två dagar i månaden då det inte är molnigt, så en ljus växtplats utan direkt sol är bäst, inte mer än 27000 lux. Temperaturen är jämn hela året och varierar inte mycket överhuvudtaget, nattemperaturen sjunker vanligen inte under 16 grader och dagtid går den sällan över 25 grader.
Den behöver en väldränerad, luftig, svagt sur, mix av medelgrov barkkompost och sphagnum.
Ge den rent vatten av god kvalité och mycket av det, gärna regnvatten eller R/O.

!Synonymer
__Homotypic Synonyms:__
//Selenipedium schlimii// Linden (1854)
//Paphiopedilum schlimii// Stein (1892)
__Heterotypic Synonyms:__
//Cypripedium schlimii// Linden (1854)
//Cypripedium schlimii// var. //albiflorum// Linden (1874)
//Phragmipedium schlimii// var. //albiflorum// Braem (1996)
//Phragmipedium schlimii// f. //albiflorum// O.Gruss (1996)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragschlimii.htm]] 2015-10-30
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Phrag-schlimii.html]] 2015-10-30
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=274]] 2015-10-30
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:152890]] 2015-10-30









!Allmänt och utbredning
Denna art växer i Himalaya och Java på höjder från 1500 till 2600 meter över havet. Det är en sval- till kallväxande epifyt av medelstorlek.

!Utseende
Växten får avlånga, ovalt äggformade pseudobulber i klungor, med två smala lansettlika blad på varje bulb. Bulberna kommer med väl avgränsade mellanrum på ett synligt rhizom. Plantan får tre till tio doftande blommor på en upptill 30 cm lång, hängande blomstjälk.
Blommorna har långsmala, vågiga petaler och kan vara tio cm i diameter. Läppen är snövit med fem gula fläckar. Den blommar i januari till mars. Efter pollinering tar det upp drygt 26 månader innan frökapseln är mogen.

!Skötsel
För en lyckad blomning av //Coel. cristata// och //[[Coel. flaccida|caad6542-10c0-4483-aaf5-9354fef2040f]]// behöver plantorna en kall period, speciellt under vintern, då temperaturen bör gå ner till minst 10 grader under nätterna. Den trivs utomhus i friska luften från våren till sena hösten. Men undvik direkt sol, bladen bränns lätt.
Vattna ordentligt under sommaren. På hösten, före blomningen, reduceras vattningen. Efter blomningen, under viloperioden, kan den hållas helt torr och klarar sig med att bara bli duschad med jämna mellanrum.
Arten föredrar att växa monterade på bark eller i en korg, så att blomstjälkarna kan hänga fritt. Som kompost i kruka eller korg kan man använda lika delar sphagnum och torv, med en liten tillsats sand. Använd, kasserad, phalanopsiskompost är också utmärkt. Omplanteringen bör ske efter det att blomningen är över.

!Synonymer
__Heterotypic Synonyms:__
//Cymbidium speciosissimum// D.Don (1825)
//Coelogyne cristata// var. //hololeuca// Rchb.f. (1881)
//Pleione speciosissima// Kuntze (1891)
//Coelogyne cristata// f. //hololeuca// M.Wolff & O.Gruss (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelocristat.htm]]
[[Video på hur en blomma slår ut |ftp://www.dddrefahl.de/dd/dddrefahl.de/bilder/orchideen/Coelogyne_cristata.wmv]]

































!Allmänt och utbredning
Arten återfinns i skogarna i den sydöstra delen av den kinesiska provinsen Yunnan och norra delen av Myanmar/Burma.
De beskrevs först som en naturhybrid mellan [[Paph. villosum|4ada762d-92fa-465b-aee9-f1c979290f41]] och [[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]] som den är nära besläktad med, men har senare fått status som egen art.
Namnet kommer för att hedra mr. Aree Petchleung som upptäckte arten i den autonom kinesiska region Guangxi.

!Utseende
Det är en liten till medelstor planta med ett stamliknande rhizom från vilket det med flera cm mellanrum kommer grupper med blad. Arten är unik såtillvida att stammen i naturen kan bli mer än en halv meter lång, påminnande mer om en [[Vanda|58f9face-6d6b-4352-b886-8fcddc1ec749]] än andra paphar. I odling blir stammen sällan mer än sex cm lång. Bladen är avlångt långsmala, upptill 35 cm långa och fyra cm breda, i ljust grönt med markeringar i purpur mot basen på ovansidan och jämnt mörkgrön undersida. Under hösten kommer liksom hos [[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]] en 15 till 25 cm lång, upprätt eller hängande, tätt behårad blomstängel som bär en ensam blomma. Blomman själv som är drygt nio cm stor i en grönaktig färg påminner mer om [[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]]. Den dorsala sepalen är brungrön med breda vita kanter och bruna ränder mot basen. Synsepalen är ljust gulgrön med mörkare nerver. Petalerna är gulgröna med purpurbruna nerver och läppen är ljust brungrön med mörkare nerver med en gul staminoid.

!Skötsel
De bör ges en växtplats i skugga och intermediära temperaturer. Odla den i en väldränerad mix av medelgrov barkkompost och perlite eller sphagnum. Vattna var fjärde eller var femte dag.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum rhizomatosum// S.C.Chen & Z.J.Liu (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphareeeanum.htm]] 2015-02-05


















































































!Allmänt och utbredning
//Duckella// är ett sydamerikanskt, terrestriskt släkte som även om det beskrevs för mer än 70 år sedan fortfarande bara innehåller <$view field="count"/> accepterad arter. Två av arterna, //[[Duc. adolphii|c00362df-e0b7-4f76-b72f-424dbf388e3d]]// Porto & Brade och //[[Duc. pauciflora|8f527475-6cb5-4eef-831b-d31dedb3e188]]// Garay, är kända från de låglänta områdena kring floderna Orinoco och Amazonfloden i Colombia, Venezuela och Brasilien, där de växer på höjder upp till cirka 175 meter över havet. Den tredje arten, //[[Duc. alticola|7b181d7d-535f-41ee-8960-13e8c8914f85]]// C. Schweinf., anses endemisk för sydöstra Venezuela där den växer på ständigt våta platåberg, så kallade [[tepuis|https://sv.wikipedia.org/wiki/Tepui]], mellan 1350 och 2000 meters höjd.
Även om det inte finns några riktigt vattenlevande orkidéer, har //Duckeella// rapporterats växande på flytande mattor av vegetation i säsongsöversvämmade områden. Detta släkte är den mest primitiva medlemmen av Pogonieae och liknar inget annan släkte. De kännetecknas av en gräsliknande tofs med långa linjära blad och klargula blommor utan speciellt mycket mer färg eller utsmyckning.
Släktnamnet hedrar den brasilianska botanisten [[Walter Adolpho Ducke|https://en.wikipedia.org/wiki/Adolpho_Ducke]] (1876-1959) som ägnade sitt liv åt att studera Amazonas växter.

!Utseende
Arterna i //Duckeella// saknar pseudobulber utan producerar långsträckt, fibrösa, håriga rötter och långsmala blad som kommer alternerande på den upprätta, upptill 80 cm långa stammen. Rötterna är, till skillnad från närstående släkten, inte ihåliga. De en till tolv stycken relativt stora, doftande, gula blommorna kommer i en avslutande, enkel blomställning i toppen av stammen eller som en grenad blomklase. Sepaler och petaler är fria och av samma storlek och form. Läppen är liten i förhållande till sepaler och petaler, och läppens laterala flikarna är betydligt mindre än mitten fliken. På läppens ovansida finns upphöjda mönster i mörkare färger. Det som särskiljer //Duckeella// från andra släkten inom Vanilloideae är bland annat en bred, vingad könspelare med vingliknande utskott på båda sidor av den rörliga ståndarknappen och granulära pollinier.

!Skötsel
Den förekommer inte alls i odling. Insamlare rapporterar att bladen mörknar och vissnar omedelbart efter insamlandet, något som är vanligt hos plantor med stark association till svampar, ett symbiotiskt komplex som kallas [[mykorrhiza|https://sv.wikipedia.org/wiki/Mykorrhiza]]. Troligen skulle inte plantorna överleva någon längre tid utan denna symbios.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Pogonieae ''Undertribus'': N/A

----
''Typart''
//[[Duc. adolphii|c00362df-e0b7-4f76-b72f-424dbf388e3d]]// Porto & Brade (1938 publ. 1940)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning
;Marta Kolanowska & Dariusz L. Szlachetko, 2015,
://Fourth species of //Duckella// (Orchidaceae) discovered in Colombia//
:Polish Botanical Journal. Volume 60, Issue 1, Pages 37–39, ISSN (Online) 2084-4352, DOI: 10.1515/pbj-2015-0002, 14 december 2015











































!Allmänt och utbredning
//Paph. glaucophyllum// [paf-ee-oh-PED-ih-lum glaw-koh-FIL-um] är en medelstor, terrestrisk art från centrala Sumatra och Java som återfinns på vulkaniska berg mellan 200 och 800 meters höjd. Den är mycket lik //[[Paph. liemianum|20ba5c54-0e68-47e3-a9e8-33b75e0b60fe]]// men med betydligt ljusare blad, //[[Paph. victoria-regina|8f6674ad-39da-4b4f-9369-7a66ed3bed84]]// förutom att blommorna är betydligt mindre och att //Paph. glaucophyllum// växer på lägre altitud.
Artnamnet kommer av ''glaucous'' efter den grå- eller blåaktiga, vaxartade beläggningen på bladen som lätt kan gnuggas bort. Taxonomiskt tillhör den undersläktet Cochlopetalum. Kromosomtalet är 2n=36 eller 2n=37.

!Utseende
Den bildar fyra till sex avlånga, blågröna blad som kan bli mer än 30 cm. Under vår och sommar kommer en upptill 40 cm lång blomstängel som kan bära så många som 20 blommor, även om oftast endast en åt gången är öppen och aldrig mer än två åt gången. Den kan blomma under ett år till 18 månader på samma stängel. Varje blomma varar cirka tre till fyra veckor och ersätta omgående med en ny. Plantan kommer oftast att bilda en ny stängel från ett nytt skott innan den gamla har slutat blomma, vilket gör detta till en nästan ständigt blommande planta. Blommorna blir åtta till elva cm bred och kommer med fem cm mellanrum på stängeln. Den dorsala sepalen är vit med ränder i grönt och lila, de laterala petalerna är vridna, med lila fläckar och hår längs kanterna. Läppen är vit vid basen med en djupnande rosa-lila färg.

!Skötsel
//Paph. glaucophyllum// har sin naturliga livsmiljö på regniga vulkaniska bergssluttningar och fuktiga kalkstensklippor. Den föredrar en varm och ljus halvskugga med en jämn fuktighet under hela året utom under en kort viloperiod under vintern.
Odla i en väldränerad mix med medelgrov bark och perlit eller sphagnum, gärna med en tillsats kalk. Vattna regelbundet ungefär var fjärde till var femte dag. Ge mycket ljus och vatten under sommaren. För att inducera blomning, ge en kort vila under senhösten med minskad vattning. Temperaturen bör inte någon gång gå under 18 grader.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium glaucophyllum// Mast. (1903)
//Cordula glaucophylla// Rolfe (1912)
//Paphiopedilum victoria-regina// subsp. //glaucophyllum// M.W.Wood (1976)
__Heterotypic Synonyms:__
//Paphiopedilum glaucophyllum// f. //flavoviride// Braem (2001)
//Paphiopedilum moquetteanum// f. //flavoviride// Braem & Chiron (2003)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphglaucophyllum.htm]] 2015-05-08
[[Wikipedia|http://en.wikipedia.org/wiki/Paphiopedilum_glaucophyllum]] 2015-05-08
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_glaucophyllum]] 2015-05-08
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/cochlopetalum/glaucophyllum/index.html]] 2015-05-08


















!Allmänt och utbredning
Den är endemisk för Bacanön i den indonesiska ögruppen Moluckerna där den växer terrestriskt eller litofytiskt i lövkompost och mossa i klippskrevor mellan 1000 och 1300 meters höjd.
Arten är uppkallad efter den tyske botanisten Gustav Schoser, föreståndare för Frankfurts botaniska trädgård. Det är en av dessa arter från sektionen Barbata som liksom //[[Paph. hennisianum|19559cca-d5bd-4c71-bc27-61bb6810e032]]// och //[[Paph. fowliei|e2d27dd3-b54f-4aaf-aa80-edba712ac37a]]// är att mindre extravaganta i sitt utseende och som ett resultat inte får mycket uppmärksamhet från odlare. Den är därför ovanligt i odling, ett oönskat faktum med tanke på dess begränsade spridning i naturen. Det uppskattas att 90% av populationen har försvunnit de senaste decennierna och att det finns mindre än 50 vuxna individer kvar i naturen.
Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Chloroneura. Det har spekulerats om att den skulle vara en naturlig hybrid mellan //[[Paph. acmodontum|44ac2c5c-f92c-4829-b06a-c2545dd05a82]]// och antingen //[[Paph. urbanianum|a045f2db-f0f6-4815-baea-63f6a27a3a36]]// eller //[[Paph. javanicum|265a9b4f-971a-45d2-a42b-5d524c87368b]]//. Kromosomtalet är 2n=35.

!Utseende
Den bildar två till fem stycken tio till 23 cm långa och två till fem cm breda blad, på ovansidan marmorerade i ljust och mörkt grönt, undersidan är ljust grön med en tydlig, längsgående köl. Längs kanterna mot basen sitter tätt med tunna hår. Den bildar under hösten en 15 till 25 cm lång blomstängel, tätt täckt med röda hår. Stängeln bär vanligtvis en ensam blomma, mer sällan två, sex till åtta cm stor.

!Skötsel
Arten växer i djup skugga i intermediära temperaturer med relativt jämn fuktighet hela året. Dess naturliga utbredningsområde är fuktigt under vintern och våren och utsätts för kraftiga regn under sommaren. Odla i en väldränerad mix med medelgrov barkkompost och perlit eller vitmossa. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning behöver vattningen minskas på vintern. Låt inte temperaturen gå under tolv grader.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphschoseri.htm]] 2015-08-18
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/schoseri/index.html]] 2015-08-18
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_schoseri]] 2015-08-18








































!Allmänt och utbredning
Släktets <$view field="count"/> arter återfinner man i kinesiska Himalaya, Assam, Bangladesh, östra Himalaya, India, Nepal, ögruppen Andamanerna, Myanamar, Thailand, Laos och Vietnam. Det är epifytiska, monopodiala plantor som trivs i full sol i såväl sumpiga kärr som molnskogar mellan 1200 och 1750 meters höjd över havet.
//Papilionanthe// 'Miss Agnes Joaquim', Singapors nationalblomma, är en naturhybrid som spontant uppstod mellan //[[942a8ec5-cbcb-4081-950b-c31497792502]]// och //[[Pplnnt. hookeriana|a9b0f352-f4fb-4b8f-9353-be056d068c35]]//.
Namnet kommer från ''papilio'' som betyder "fjäril" och ''anthe'' som betyder "blomma", efter blommornas likhet med en stor, färggrann tropiska fjäril.

!Utseende
De stora plantorna har långa, smala stjälkar som bär tjocka, runda, pennliknande blad och växer snabbt, klättrar hela tiden mot mer ljus. Rötterna kommer ut från bladnoderna, längs hela stammens längd. Blommorna produceras periodvis under hela året men framförallt under senvår och tidig sommar, på upptill 30 cm långa blomstänglar som bär tre till sex blommor. Blommorna är stora och platta med sepaler och petaler lika, även om petalerna vanligen är större än sepalerna. Färgerna är företrädesvis vita och rosa med markeringar i rött, gult och grönt. Plantorna begränsas varken av storlek eller ålder, ju större plantan är desto fler blommor producerar den och blomningen blir bara mer imponerande. Om den får det starka solljus den behöver för att bilda blomanlagen.

!Skötsel
Odlingen är som för //[[Vanda|58f9face-6d6b-4352-b886-8fcddc1ec749]]// med värme, hög luftfuktighet och mycket ljus, full sol är vanligtvis inga problem bara de har tillgång till kopiösa mängder vatten och näring. De trivs i temperaturer mellan 25 och 32 grader, men några arter föredrar lite svalare, ner till mellan 20 och 25 grader.
Eftersom de är närmast aggressiva i sitt klättrande växtsätt är det vanligaste odlingssättet att binda upp plantan, eller flera plantor, mot ett kraftigt stöd, gärna en och halv eller två meter långt. Dock brukar plantan inte blomma förrän den är närmare en halv meter längre än stödet. De kan även odlas i korgar med väldränerad grov barkkompost eller monterade. Om plantans bas kan hållas jämnt fuktig, inte blöt, under varma dagar kan den ta in mer vatten och näring och producera längre och kraftigare blomstänglar. De kan ta vilken organisk gödning som finns tillgänglig. Många odlare har haft goda framgångar med ko-, svin- och hönsgödsel, eller till och med multnande träspån, för att odla otroliga plantor.
Förökning av släktets arter görs enklast genom att helt enkelt skära av en bit av plantans topp som har minst fem blad och åtminstone några rötter som är längre än fem cm. Plantorna grenar sig då villigt.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Vandeae
''Undertribus'': Aeridinae

''Typart''
//[[Pplnnt. teres|942a8ec5-cbcb-4081-950b-c31497792502]]// Schlechter (1915)

''Uttal''
pa-pil-leo-NAN-the

''Synonymer''
N/A

!Rekommenderad läsning
[[Toh Garden|http://www.tohgarden.com/vanda/papilionanthe/]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Papilionanthe]]
[[OrkidePrat|http://www.neovita.com/orkideer/no.cgi?artikel=grund&grupp=papilionanthe&avdelning=latinsktNamn&huvudavdelning=rad]]
[[Tip of Texas Orchid Society|http://www.totos008.com/TOTOS/Pages/Papilionanthe.html]]



!Allmänt och utbredning
//Den. aphyllum// är en av de vanligaste dendrobiumarterna i tropiska Asien. Den växer epifytiskt i låglandsskogar och molnskogar, eller litofytiskt på kalkstensklippor, i södra, centrala och nordöstra delen av Indien, genom Nepal, västra Himalaya, Sri Lanka, Bhutan, Burma (Myanmar), provinsen Hainan i Kina, Thailand, Laos, Kambodja och Vietnam till den malaysiska övärlden mellan 100 och 1800 meters höjd.
Inom traditionell kinesisk medicin anses en infusion på torkade bulber bromsa eller motverka åldrandet och förlänga livet. Ny forskning har påvisat en positiv inverkan på immunförsvaret. 
//Den. aphyllum// är en attraktiv och lättodlad orkidé som återfinns i nästan varje botanisk trädgård och många amatörers samlingar.
Arten upptäcktes av William Roxburgh i södra Indien och beskrivs i hans bok ''Plants of the Coast of Coromandel'' 1795 under namnet //Limodorum aphyllum//. Tyvärr var illustrationen han tillhandahöll inte korrekt och har lett till tvister om denna arts sanna identitet under de följande två århundradena. Det hjälpte inte att den bok där Roxburgh publicerade sin orkidé i alltid varit sällsynta och i stort sett otillgänglig, utom i några av världens mest välsorterade botaniska bibliotek, såsom Royal Botanic Gardens, Kew.
Under större delen av 1800- och 1900-talen var //Dendrobium aphyllum// mest känd som //Den. pierardii//, kanske för att den senare arten illustrerats bättre av Sir William Hooker 1822. Under detta namn blev det en av de mest odlade dendrobiumarterna. Ett annat namn för denna art, //Den. cucullatum//, publicerades 1821 av Robert Brown, men fram till nyligen detta hade nästan glömts bort. Det korrekta namnet, //Den. aphyllum//, kom bara i allmänt bruk efter 1985, då den inflytelserika danska botanisten Gunnar Seidenfaden bekräftat, om än med vissa reservationer, att det var samma art som odlades under namnet //Den. pierardii//. Gradvis har namnet //Den. aphyllum// åter börjat komma i bruk.
Namnet ''aphyllum'' betyder "bladlös" och anspelar på artens vana att fälla bladen under vintervilan.

!Utseende
Den bildar långa, smala, hängande pseudobulber som kan bli upptill två meter långa! Vanligen är bulberna mer blygsam med mellan 20 och 50 cm långa och med tre till tio cm långa och en till tre cm breda blad som gulnar under hösten och faller av under viloperioden. Under några veckor mellan februari och juli kommer många korta blomstänglar i noderna på förra årets bladlösa bulber med en till tre blommor per stängel. De tre till fem cm stora violdoftande blommorna har sepaler och petaler i nästan genomskinligt vitt eller ljust gult och med markeringar i violett. Läppen är trumpetformad, upptill fyra cm fullt öppen, ljust gul eller mer sällan vit, med mörkt violetta ränder invändigt och tätt beklädd med mjuka, korta hår på yttersidan och längs kanterna utom mot basen.

!Skötsel
//Den. aphyllum// är lätt att odla varmt till intermediärt under ljus skugga. Under växtsäsongen, när de nya bulberna växer till och bildar blad måste plantan hållas väl vattnad med hög luftfuktighet. Under denna period, vanligtvis från maj till oktober, kan regelbundna, låga doser av gödningsmedel ges. Under senhösten och vintern bör vattning och gödsling minskas kraftigt, en vattning varannan vecka eller lätta sprayduschar räcker för att förhindra uttorkning. Lägre temperaturer men inte frost och mycket ljus under den avlövade perioden kan stimulera blomning följande vår. Börja vattna och gödsla igen tidigt på våren när de nya skotten kommer.
På grund av de hängande bulberna och storlek växten kan uppnå, odlas den bäst i små, hängande korgar. Använd en öppen, väldränerad barkkompost som byts innan den bryts ner alltför mycket.

!Synonymer
__Homotypic Synonyms:__
//Limodorum aphyllum// Roxb. (1795)
//Cymbidium aphyllum// Sw.(1799)
//Epidendrum aphyllum// Poir. (1810)
//Callista aphylla// Kuntze (1891)
__Heterotypic Synonyms:__
//Dendrobium cucullatum// R.Br. (1821)
//Dendrobium pierardii// Roxb. (1822)
//Pierardia bicolor// Raf. (1838), nom. superfl.
//Dendrobium pierardii// var. //cucullatum// Hook.f. (1890) nom. illeg.
//Dendrobium oxyphyllum// Gagnep. (1950)
//Dendrobium madrasense A.D.Hawkes (1963) nom. illeg.
//Dendrobium aphyllum var. cucullatum P.K.Sarkar (1984)
//Dendrobium aphyllum var. katakianum I.Barua (2001)

!Rekommenderad läsning
[[Kew Royal Botanic Garden|http://www.kew.org/plants-fungi/Dendrobium-aphyllum.htm]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendaphyllum.htm]]
[[The Orchid Column|http://www.theorchidcolumn.com/2012/05/dendrobium-aphyllum.html]]

























!Allmänt och utbredning
Arten återfinns terrestriskt eller litofytiskt på avsatser ovanför rinnande vatten i lägre bergsskogar på några få platser i delstaten Sabah, Borneo, mellan 600 till 1600 meters höjd.
Namnet har den fått från den malaysiska orkidéentusiasten och odlaren Michael Ooi. Det finns bara en man som vet den exakta växtplatsen för //Paph. ooii//, absolut ingen annan, och förutom hans svåger, har ingen tillåtits komma med till den plats där den växer. Han har varit den enda källan för denna art. Taxonomiskt tillhör den undersläkte Polyantha sektion Mastigopetalum.

!Utseende
Det är en stor art, en av de största inom släktet, som bildar sex till åtta stycken 50 till 70 cm långa och drygt sju cm breda, mörkgröna blad med rundade spetsar. Under senvintern eller våren kommer en upptill två m lång och 15 mm tjock blomstängel med fyra till 17 blommor. De tre cm stora blommorna liknar de hos //[[Paph. glanduliferum|08b40dd1-30e3-4380-9706-d73ec898e1ff]]// och //[[Paph. kolopakingii|f72a725d-1ff8-4f0e-b6a8-50c69f7842a8]]// men med en kortare, oval dorsal sepal, vridna petaler och en kortare läpp med en vit staminoid utan så mycket hår. Den dorsala sepalen är ljusgrön med 15 till 17 längsgående mörklila strimmor. Petalerna är gulbruna till ljusgröna med en eller två längsgående lila strimmor. Läppen är gulbrun.

!Skötsel
Arten växer i mossa och löv på vassa klippor. Området utsätts för kraftiga regn från höst till tidig vår. Området är sällan torr och oftast mycket dimmigt.
Håll den i måttlig skugga till starkt ljus med intermediära till varma temperaturer, från 15 till 30 grader. Använd en öppen mix och håll luftfuktigheten hög från cirka 70 till 85%. Vattna kraftigt under hösten till våren och håll temperaturen över åtminstone 12 grader.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphooii.htm]] 2015-06-01
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/ooii/index.html]] 2015-06-01
[[Cypripedioideae|http://cypripedioideae.e-monocot.org/taxonomy/term/429]] 2015-06-01

;H. Koopowitz, 1999
:Paphiopedilum ooii//, a remarkable new Slipper Orchid from Malaysia//, Orchid Digest Volume:63 Pagination: 106-107




!Allmänt och utbredning
//Milt. moreliana// är en art som förekommer i Venezuela och Brasilien från Bahia i sydöst till Espárito Santo i norr runt 800 meters höjd.
Arten är döpt efter den franske odlaren monsieur Morel i kommunen St. Mande nära Paris, som var den förste odlaren som fick den att blomma i Europa 1846. Den kan fortfarande hittas i handeln under namnet //Miltonia spectabilis// var //moreliana// som den ofta anses vara en variant av. Dess blommor är dock större och kraftigare än blommorna hos //[[Milt. spectabilis|c5a9dd4f-bd39-4723-b1fc-5d01be445ae9]]//.

!Utseende
Den har ovala, från sidan tillplattade pseudobulber med bara fem till tio cm långa rötter och två avlånga blad i toppen. Både bulber och blad är ljust gulgröna när plantan får tillräckligt med ljus. Under sensommar och höst kommer från basen av de unga bulberna en 20 cm lång blomstängel som normalt bara bär en enda blomma. Arten blommar konsekvent på andra tider än //[[Milt. spectabilis|c5a9dd4f-bd39-4723-b1fc-5d01be445ae9]]//, och proportionerna hos blomman är också helt annorlunda. Sepalerna och petalerna hos de upptill tio cm stora blommorna är intensivt färgade i mörkt purpur med en ljust rosa bas. Läppen är ljusrosa med tydliga, mörkare strimmor.

!Skötsel
Det är en intermediär till varmväxande art som trivs bra i grunda korgar med en grov kompostmix toppad med finare kompost eller monterad om den kan hållas fuktig. Rötterna är korta så en stor, djup kruka med mycket kompost som håller mycket vatten innebär bara bekymmer. Plantorna mår bäst av sommartemperaturer på minst 26 grader på dagen och nertill 18 på natten. Vintertemperaturen bör ligga runt eller strax över 21 grader dagtid och 14 nattetid.
Vattna och göd ordentligt när de tillväxer så bildar de snart stora plantor. Vattna tre gånger i veckan under tillväxtperioden och en eller två gånger i veckan under de svalare månaderna. Ge den en ljus växtplats med god luftcirkulation.

!Synonymer
__Homotypic Synonyms:__
//Miltonia spectabilis// var. //moreliana// Henfr. (1851)
__Heterotypic Synonyms:__
//Miltonia morelii// B.S.Williams (1862)
//Miltonia rosea// Lem. (1867)
//Miltonia warneri// G.Nicholson (1886)
//Miltonia spectabilis// var. //atrorubens// Rolfe (1894)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/miltmoreliana.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Miltonia_moreliana]]
























































!Allmänt och utbredning
Det är en medelstor, vittspridd låglandsart som återfinns från Mexiko i Centralamerika, på Kuba och öarna i Karibiska havet, i Sydamerika ner till Argentina. Där växer den epifytiskt, litofytfytiskt eller terrestriskt mellan extremerna 300 och 3900 meters höjd.
//Ischls. linearis// pollinerare är inte känd, men utifrån blommornas morfologi anses det troligt att de pollineras av kolibrier. Baserat på experiment utförda i ett växthus med plantor från Serra do Japi observerades det att blommorna är självpollinerande.

!Utseende
Flera plantor kan växa tätt tillsammans och bilda stora bestånd. De saknar pseudobulber utan har en lång, smal, upprätt stam med långsmala blad alternerande i två rader. Bladens bas omsluter stammen helt. De slanka stjälkarna växer lodrätt till att börja med, men kommer att välva sig när de når upp till sin fulla längd på 80cm. Från toppen av stammen kan när som helst under året en upptill sex cm lång blomstängel komma. Den kan bär så många som ett dussin rörformade blommor som inte blir mer än en cm stora. Blommorna har en ljust rosa färg men kan variera från nästan vitt till mörkt purpur. Blommorna som kommer i flätor längs spetsen på stammen skapar en mycket imponerande uppvisning trots den enskilda blommans ringa storleken. Blommorna varar bara cirka tio dagar, men de kan hålla längre om den väljer att blomma när det inte är så varmt.

!Skötsel
De trivs lika bra i svala, intermediära eller varma temperaturer bara de får en halvskuggig växtplats med hög luftfuktighet. Arten är lätt att odla i en vanlig kompostmix av medelgrov barkkompost och en andel perlite eller sphagnum. Använd gärna en tung lerkruka då den lätt blir topptung.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum lineare// Jacq. (1760)
//Cymbidium lineare// Sw. (1799)
//Leptothrium lineare// Kunth (1816)
__Heterotypic Synonyms:__
//Coilostylis obtusifolia// Raf. (1838)
//Isochilus leucanthus// Barb.Rodr. (1877)
//Isochilus linearis// var. //leucanthus// Cogn. (1898)
//Isochilus peruvianus// Schlechter (1921)
//Isochilus brasiliensis// Schlechter (1926)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/isoclinearis.htm]]
[[the Brisbane Orchid Society|http://www.users.on.net/~gmcorbin/BOS/Articles/Isochilus%20linearis.html]]

















!Allmänt och utbredning
Det är en miniatyrepifyt från de fuktiga bergsmolnskogarna i Centralamerika och norra Sydamerika där den växer i Nicaragua, Costa Rica, Panama, Colombia, Ecuador, Peru, Bolivia och Venezuela mellan 180 och 1500 meters höjd.
Artepitetet kommer från latinets ''orbiculari'' som betyder "rund" och anspelar på bladets form.

!Utseende
Den saknar pseudobulber utan direkt från en underjordisk stam kommer de upprätta bladstammarna som bär ett ensamt blad. De runda bladen är gröna på ovansidan och mörkt purpur på undersidan. Under vintern till senvåren kommer de minimala blomstänglarna från bladbasen på undersidan av bladen. Blommorna blir bara två och en halv mm stora men kommer i klasar om upptill tio stycken.

!Skötsel
Den växer i områden med intermediära och varma temperaturer, 13 till 29 grader, och hög luftfuktighet så försök efterlikna de förhållanden. Ge den ljus skugga utan direkt solljus, ungefär 5000 till 16000 lux, och jämn vattning, håll den fuktig hela tiden. Om den odlas monterad eller i kruka betyder det vattning varje eller varannan dag. 

!Synonymer
__Homotypic Synonyms:__
//Specklinia orbicularis// Lindl. (1839)
//Pleurothallis orbicularis// Lindl. (1842)
//Humboltia orbicularis// Kuntze (1891)
__Heterotypic Synonyms:__
//Pleurothallis biflora// H.Focke (1849)
//Lepanthes orbiculata// Rchb.f. (1856)
//Humboltia biflora// Kuntze (1891)
//Pleurothallis trachytheca// F.Lehm. & Kraenzl. (1899)
//Pleurothallis lancifera// Schlechter (1924)
//Trichosalpinx lancifera// Luer (1983)
//Trichosalpinx oxychilos// Carnevali & G.A.Romero (1993)

!Rekommenderad läsning
[[Orchid Karma|http://www.orchidkarma.com/trichosalpinx-orbicularis/]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/trichorbicularis.htm]]




































!Allmänt och utbredning
Denna minatyrart påträffas epifytiskt i sydöstra Asiens lövfällande bergsskogar i provinsen Assam i nordöstra Indien, provinserna Guangdong, Guangxi, Guizhou och Hainan i Kina, Hong Kong, Myanamar, Thailand, China, Laos, Cambodia och Vietnam mellan 650 och 1300 meters höjd. Den skiljer sig från den likartade //[[Den. jenkinsii|5395a6c7-f558-4c13-9d20-bb3e8fa861dd]]// framförallt genom att få blomställningar med många blommor. Den säljs fortfarande ofta felaktigt som //Den. aggregatum// var. //majus//.
Den är döpt för att hedra den framstående engelske 1800-tals botanikern John Lindley.

!Utseende
//Den. lindleyi// är en relativt liten art med tjocka pseudobulberna som smalnar av mot toppen och det enda, ovala läderartade bladet kan bli upptill sju cm långt med en grund, längsgående fåra. Bladen blir mörkgröna om de står skuggigt och ljusare om de står mer utsatta för intensivt ljus. Till skillnad mot de flesta andra dendrobiumarter bildar denna inga långa bulber utan de är korta och tjocka, som bildar en klunga med tätt sittande bulber och bulberna släpper inte sina blad varje säsong. Varje fem cm stor bulb är täckt av ett tunnt, pappersaktigt täckblad och den underliggande vävnaden bör vara lätt rödaktig om plantan får tillräckligt med solljus. Den ofta hängande blomstängeln som kommer från noder nära mitten av bulben kan bli 30 cm lång. Vanligen kommer blomstängeln från bladlösa bulber under vintern eller tidig vår, men de kan komma på bulber som fortfarande har sina blad i behåll. Det tar flera veckor för blomstängeln att förlängas och knopparna att börja svälla. Blomstängeln bär mellan fem och 20 svagt bivax- eller honungsdoftande, guldgula till gulorange blommor med en mörkare läpp. Färgerna hos blomman mörknar med ålder. Blommorna är platta med runda sepaler som kan bli mellan två och fem cm stora, hela blomman påminner om pansér. Beroende på temperatur och luftfuktighet kan blommorna stå från en vecka upptill en månad och blomstängeln bildar inga nya knoppar när de gamla väl vissnat.

!Skötsel
De behöver en mycket ljus växtplats i rumstemperatur, lika som för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//. Under tillväxtperioden behöver de mycket vatten och gödning, så mycket som halv dos kväverik gödning varje vecka. Den kommer inte att blomma om den inte får tillräckligt med ljus. Den behöver en sval, ljus och torr vintervila under några månader för att blomma under våren. Om temperaturen är över 15 grader under december till februari kommer den inte att blomma. Med början i november kan man försumma den; nästan ingen vattning eller gödning alls om inte bulberna börjar skrumpna mycket eller bladen börjar falla, och en temperatur under 15 grader på nätterna. Börja vattna igen när knopparna börjar synas.
Odlas med fördel monterad om den kan ges tillräckligt med vatten men växer även utmärkt i små krukor eller korgar med vanlig, väldränerad kompost. De är lätta att dela när plantan blivit för stor, men varje delning bör bestå av fem till nio bulber och det kan ta ett par säsonger innan delningarna börjar blomma igen.

!Synonymer
__Homotypic Synonyms:__
//Dendrobium aggregatum// Roxb. (1832)
//Callista aggregata// Kuntze (1891)
__Heterotypic Synonyms:__
//Epidendrum aggregatum// Roxb. (1840)
//Dendrobium alboviride// var. //majus// Rolfe (1932)
//Dendrobium lindleyi// var. //majus// S.Y.Hu (1973)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denlindleyi.htm]]
[[the Wisconsin Master Gardener Program|http://wimastergardener.org/?q=Dendrobium_lindleyi]]
[[Orchids Online|http://www.orchidsonline.com.au/node/1078]]
[[Wikipedia|http://en.wikipedia.org/wiki/Dendrobium_lindleyi]]






































































!Allmänt och utbredning
I fuktiga skogar i de tropiska delarna av Amerika lägre än 1500 meter finns de <$view field="count"/> arterna av släktet //Brassia//, i regel växande som epifyter.
De kallas ofta för spindelorkidéer på grund av sina märkligt formade blommor. Släktet pollineras uteslutande av parasitiska getingar av honkön i släktena //Pepsis// och //Campsomeris// som normalt lägger sina ägg på spindlar. Mönstret på brassiablommorna liknar en spindel tillräckligt mycket för att getingarna ska försöka lägga sina ägg på blommorna. När de upprepade gånger sticker mot läppen fäster pollinerna på deras huvud. När de fortsätter till nästa blomma förs pollinerna över till kolumnen och märket på den blomman.
Arterna inom släktet kan delas in i två stora grupper, ''Eubrassia'' och ''Glumacea''. Släktet är namngivet efter den engelske 1800-tals illustratören och botanikern William Brass. Ironiskt nog var Brass verksam i södra Afrika och var aldrig involverad i släktet som nu bär hans namn.

!Utseende
Plantorna varierar i storlek från åtta till 50 cm stora. Släktet karaktäriseras av iögonfallande pseudobulber med ett eller två blad från toppen. De har dessutom bladskidor som omsluter basen av bulben. Bladskidorna fälls varje säsong, och det är i skydd av dessa bladskidor som blomstängeln kommer.
Stängeln grenar sig oftast inte. Blommans kallus är placerad vid basen av läppen. Storlek och form på kallusen är en av de huvuddrag som används för att särskiljer olika arter. Vanligtvis är läppen fri från kolumnen och utan sporre, läppen är i regel slät men hos några arter har den knölar och vårtor.
Stängeln producerar svärmar av spektakulära spindellika blommor i gula färger med mörka markeringar. Många arter producerar även en sötaktig doft, speciellt under de varma timmarna på dagen.

!Skötsel
De är relativt lätta att få att växa monterade eller i krukor med en fri dränerande kompost, och odlade under intermediära förhållanden. Alla arterna fodrar en ljus, eller mycket ljus, växtplats utan direkt sol under middagstimmarna. Vattna regelbundet och generöst så komposten hålls konstant lätt fuktig under bulbernas tillväxt till dess blomningen är över. En minskad vattningsfrekvens under vintervilan när bulberna är färdigutvecklade stimulerar blomningen.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//[[Brassia maculata|a0fd2f50-dfe2-4645-a5cf-bcc69d76a8e5]]// R.Brown (1813)

''Uttal''
BRASS-ee-ah

''Synonymer''
__Heterotypic Synonyms:__
//Brachtia// Rchb.f. (1850)
//Mesospinidium// Rchb.f. (1852)
//Ada// Lindl. (1853)
//Oncodia// Lindl. (1853)
//Brassiopsis// Szlach. & Górniak (2006)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Brassia]]
[[Phils OrchidWorld|http://www.angelfire.com/or3/orchidsnz/scribblings/brassia1.htm]]
[[Ezine Articles|http://ezinearticles.com/?What-Does-A-Brassia-Orchid-Plant-And-A-Spider-Have-In-Common?&id=82597]]
[[Interior Water Gardens|http://www.interiorwatergardens.com/cultural_files/orchid%20culture/brassia.html]]
[[Broklyn Orchids|http://bklynorchids.com/2010/10/29/orchid-of-the-week-brassia-arcuigera/]]




































































!Allmänt och utbredning
//Phrag. longifolium// är en stor terrestrisk orkidé som växer i fuktiga skogar, längs störda vägbankar och bland stenar längs floder och dammar i klippiga områden i Mexiko, Costa Rica, Panama, Colombia och Ecuador mellan 600 och 1700 meters höjd över havsnivå. Även om de inte är strikt lithofytiska verkar dessa växter kunna frodas på en tunn matta av fuktiga alger och ruttnande mossa som täcker stenarna i eller nära strömmande vatten, konstant fuktad av den kalla dusch av fallande vatten. De har till och med påträffats på klippor vid kusten i Colombia, över högvattenmärken, duschade av havsvattnet.
//Phrag. longifolium// har observerats pollineras av //Halictine//-bin av släktena //Chlegorella// och //Caenohalictus//, och av två arter blomflugor i västra Ecuador. Den upptäcktes först i Chiriqui Mountains i Panama av J. v. Warszewicz i mitten av 1800-talet och beskrevs som //Cypripedium longifolium// men flyttades av Rolfe 1896 till det nyskapade släktet //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]//.
Artepitetet anspelar på de långa bladen.

!Utseende
Det är en stor planta, och som artnamnet anspelar på får den mycket långa blad, upptill 80 cm långa, och smala, lansettlika, som är mörkt gröna på ovansidan och ljust gröna undertill. I sina naturliga livsmiljöer kan den blommande när som helst under året, men i odling kommer vanligen blomstänglarna under hösten eller våren. Dessa kan bli 60 till 90 cm lång och bär flera blommor i succession efter varandra. Blommorna har en grön färggrund med en mörkt purpurröd läpp och långa, tunna, vridna petaler med rödaktiga till purpurfärgade kanter. Den dorsala sepalen är grön med vita och röd-lila ränder. Blommorna är hållbara och bär en svag doft av påsklilja.

!Skötsel
De bör hållas jämnt fuktig under hela året och får inte torka ut för länge. Växten är variabla i sitt temperaturspann, och kan klara sig bra i svala till varma omgivningar, upptill 30 grader som varmast. De föredrar en ljus växtplats med indirekt sol. Komposten måste hållas konstant fuktig utan att tillåtas torka ut för mycket. De kräver inte mycket gödning och bör vattnas med rent vatten eftersom de är känsliga för uppbyggnad av salter i komposten. Växterna kan tolerera mycket vatten så länge som komposten förblir i bra skick. De kan med fördel odlas i en blandning av vitmossa, kol och perlit, eller medelgrov barkkompost med perlit.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium longifolium// Warsz. & Rchb.f. (1852)
//Selenipedium longifolium// Rchb.f. & Warsz. (1854)
//Paphiopedilum longifolium// Pfitzer (1888)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phraglongifolium.htm]]
[[Species Specific|http://www.species-specific.com/view-orchid-species-information.php?id=76]]
[[Orchid Wiki|http://orchids.wikia.com/wiki/Phragmipedium_longifolium]]
[[PhragWeb|http://www.phragweb.info/phragmipedium/species/display_species_phrag.asp?phrag_id=181]]



















































































































!Allmänt och utbredning
<$view field="count"/> arter från Mexico till Brasilien tävlar i skönhet och komplexitet med sina blommor. Några större, kraftigare, mer uppseendeväckande blommor finns knappt. Till och med knopparna är ståtliga och förbluffande. Dessa epifytiska, sällan terrestra, orkidéer växer i fuktiga skogar vid låga altituder.
//[[Stan. wardii|dd6a25b4-78f6-447a-9711-364cb94511fc]]// är en mästare på att vilseleda insekter. Med sin doft lockar den till sig bin. När dessa landar på blomman förgiftas de av en berusande kemikalie varvid biet glider ner längs läppen. På sin väg genom blomman berör den könspelaren och får med sig ett pollenpaket. När den lämnar blomman lämnas pollenet på märket.

!Utseende
De små ovala, mörkt gröna pseudobulber får ett långt, ensamt, kraftigt tecknat blad. Blomstängeln kommer från botten av bulben och växer rakt ner, genom komposten! Blommorna har en kraftig, oftast väldoftande arom, som kan fylla ett helt rum. Blommorna kan vara 15 cm tvärs över, gulorange med kraftiga markeringar i rödsvart. Varje blomma blommar endast under en kort tid, i de flesta fall bara två eller tre dagar. I gengäld kommer nya knoppar successivt under hela blomningsperioden, som vanligtvis sträcker sig över december och januari.

!Skötsel
Eftersom blomstängeln, i de flesta fallen, kommer ut på undersidan av plantan och växer rakt ner, behöver de hänga. Det enklaste är att odla dem i en korg eller monterade. Många av dessa arter kan självklart blomma över kanten på kruka, men det blir inte lika spektakulärt eller med lika många knoppar. Överlag föredrar stanhopeor ljust, diffust solsken, varma temperaturer och vatten i kopiösa mängder. Vattningen är speciellt viktigt för att producera kraftiga bulber och friska blommor. Vattna dagligen i mer öppna korgar. Torra rötter leder till bruna bladspetsar.
Ohyra verkar däremot vara ett obetydligt problem för släktet. Under senvintern och tidig vår när bulberna mognar vill de ha en lite torrare period, ungefär hälften av vattenmängden mot under tillväxten. Ge plantan svag gödning varannan vecka och gärna lite kalk i komposten under sommaren.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Stanhopeinae

''Typart''
//[[Stan. insignis|e2053375-c1be-437b-8caf-beea3de49c77]]// Frost (1829)

''Uttal''
stan-HOPE-ee-ah

''Synonymer''
__Heterotypic Synonyms:__
//Ceratochilus// Lindley (1829)
//Stanhopeastrum// Rchb.f. (1852)
//Gerlachia// Szlach. (2007)
//Tadeastrum// Szlach. (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/stanhopea.htm]]
[[Tropical Orchid Farm|http://www.tropicalorchidfarm.com/index.php?mg=5&ar=7]]
[[Wikipedia|http://en.wikipedia.org/wiki/Stanhopea]]
[[Royal Horticultural Society|http://www.rhs.org.uk/learning/publications/orchidreview/orchid0104/stanhopeas.asp]]
[[New Hampshire Orchid Society|http://www.nhorchids.org/pages_growing/stanhopeas.htm]] & [[omplantering|http://www.nhorchids.org/pages_growing/Repotting_stanhopeas.htm]]
[[the Orchid PhotoPage|http://www.orchidworks.com/orchids/wardii.htm]]




















































































































!Allmänt och utbredning
Arten återfinns på låglandet i Panama, Venezuela, Trinidad, Tobago, Guyana, Ecuador och Colombia som en stor, varmväxande epifyt i fuktiga skogar upp till 1400 meter över havet.

!Utseende
Den har stora äggrundade till koniskt formade bulber med åsar, två till tre tunna blad och nedhängande blomstänglar med upp-och-ner-vända blommor. Bladen sitter parvis i toppen av bulben, är elliptiskt lansettlika och har tydliga bladnerver på undersidan.
Blomstjälken kan vara över en halv meter lång och blomma med upptill 30 stycken fem cm stora blommor. Dessa är mörkt röda eller brunröda med gula eller vita markeringar, eller gula blommor med mörkt brun till lilaröda fläckar. Arten blommar vanligen höst eller vinter.

!Skötsel
Komposten bör hela tiden vara fuktig, eftersom växten inte tycker om att torka ut. Det är önskvärt med en kort viloperiod efter blomningen. För att de nya bulberna ska mogna och för att stimulera blomningen, kan vattnet reduceras under en kort period. Var försiktig att inte stänka vatten på knopparna. Växten föredrar en varm, ljus växtplats utan direkt solljus.
Komposten i en korg bör bestå av grov bark och vitmossa, som inte bryts ner så fort. Plantan förökas lätt genom delning av pseudobulberna under våren.

!Synonymer
__Homotypic Synonyms__
//Gongora maculata// var. //atropurpurea// Teusch. (1966)
//Gongora quinquenervis// var. //atropurpurea// H.G.Jones (1972)
__Heterotypic Synonyms__
//Gongora heisteri// Rchb.f. (1854)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/gonatropurpurea.htm]]


































!Allmänt och utbredning
//Ancistrochilus// är ett släkte med endast två varmväxande arter, //[[Ancstrc. rothschildianus|d6c20027-241d-468f-8d04-c6237a90442f]]// och //[[Ancstrc. thomsonianus|180fe7ef-5ca4-49db-96a8-ad73412572e2]]//, som båda växer epifytiskt på trädstammar och grova grenar från de tropiska delarna av Guinea och Sierra Leone till Tanzania och Uganda, mellan 500 och 1100 meters höjd.
Släktnamnet kommer från de grekiska orden ''ankistron'' och ''cheilos'' som betyder krok respektive läpp, och anspelar på läppens form.

!Utseende
De är sympodiala, epifytiska plantor med breda, lågt kon- eller pyramidformade pseudobulber som bär två eller tre breda, lansettlika blad. Bladen fälls under hösten som förberedelse inför vintervilan.
Under vintern bildas en luden blomstängel från basen av de fullväxta bulberna. Varje stängel kan bära upptill fyra stycken åtta cm stora blommor med sepaler och petaler i ljust rosa. Läppen är mörkt rödlila med ett långt, smalt, svängt utskott.

!Skötsel
De bör odlas varmt och skuggigt i en väldränerande kompostmix av medelgrov bark och perlite. Temperaturen under dagen bör hållas mellan 18 och 25 grader och ner till mellan 13 till 16 grader under natten.
Vattna regelbundet under växtsäsongen och håll komposten fuktig, låt den inte torka ut, men håll inte heller komposten ständigt blöt. Vintertid kan vattningen minskas.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Arethuseae
''Undertribus'': Bletiinae

''Typart''
//[[Ancstrc. thomsonianus|180fe7ef-5ca4-49db-96a8-ad73412572e2]]// Rolfe (1897)

''Uttal''
an-siss-tro-KY-lus

''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Ancistrochilus]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Ancistrochilus]]
[[Un amour dOrchidé|http://www.unamourdorchidee.com/contenu/english/fiches/fiche_ancistrochilus.html]]










































































!Allmänt och utbredning
Det är en epifytisk art från Filippinerna som växer på östvättande bergssidor mellan 100 och 650 meters höjd på öarna Luzon och Leyte.
Den ansågs länge som en variant av //[[Phal. lueddemanniana|b1d42483-dcae-4868-b096-568fbcdc76c1]]//, men arterna skiljs åt vad gäller blomningstid. //[[Phal. lueddemanniana|b1d42483-dcae-4868-b096-568fbcdc76c1]]// blommar på våren medan blommorna hos //Phal. pulchra// kommer under hösten. Utseendet hos blommorna skiljer också mellan arterna. Bland annat har //Phal. pulchra// en blomma med rena färger och med tvärgående ränder hos //[[Phal. lueddemanniana|b1d42483-dcae-4868-b096-568fbcdc76c1]]//. //Phal. pulchra// kan i handeln också blandas ihop med den snarlika //[[Phal. speciosa|Phalaenopsis speciosa]]//.
Artepitetet kommer från latinets ''pulcher'' som betyder "mycket vacker".

!Utseende
Det är en liten art med en väldigt kort stam, omsluten av bladbaserna. Bladen är delvis upprätta, ovala, vanligen inte större än 15 cm långa och sex cm breda. Blomstängeln kommer mellan augusti till september och kan bli 25 cm lång. Om den odlas för varmt kommer en mycket längre stängel, upptill 60 cm lång, som inte bildar blomknoppar utan keikis. De doftande blommorna kommer ett fåtal per stängel, de är triangulära, stjärnformade. Blommorna blir fyra cm stora, färgade i nyanser av lila till purpur.

!Skötsel
I sitt naturliga habitat utsätts plantan för temperaturer mellan elva och 21 grader under den våta monsunperioden och mellan 14 och 24 grader under den torrare sommartiden. Om den står för varmt bildar den lätt keikis istället för blommor. Odlas bäst i små korgar med en medelgrov barkkompost. Håll komposten fuktig men inte våt.

!Synonymer
__Homotypic Synonyms:__
//Phalaenopsis lueddemanniana// var. //pulchra// Rchb.f. (1875)
//Phalaenopsis lueddemanniana// subvar. //pulchra// A.H.Kent (1891)
//Polychilos pulchra// Shim (1982)
__Heterotypic Synonyms:__
//Phalaenopsis lueddemanniana// var. //purpurea// Ames & Quisumb. (1932)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phalapulchra.htm]]
[[Espáces de Phalaenopsis|http://bernard.lagrelle.pagesperso-orange.fr/Pulchra/anglais/Phalaenopsis%20pulchra%20anglais.htm]]






!Allmänt och utbredning
De australiensiska/nya zeeländska orkidéerna som gemensamt benämns ''Greenhoods'' är spännande orkidéer som passar för nybörjare. Det finns <$view field="count"/> arter i släktet som växer i skogs- eller buskmarker i Nya Zeeland, Australien, Papua New Guninea och New Caledonia.
De har en fascinerande teknik för att säkerställa pollineringen. De har en beröringskänslig läpp på ett gångjärn som tillåter läppen att slår ihop om en intet ont anande insekt så fort denna snuddar blomman, och fångar den inuti blomman. Den enda vägen till friheten är att kravla över märket och genom en smal tunnel förbi pollinierna som fastnar på, och följer med, insekten till nästa blomma. Läppen återställer sig därefter vanligen efter ungefär en halvtimme.
Namnet //Pterostylis// kommer från den vingade könspelaren som är karaktäristisk för släktet efter de grekiska orden ''pteron'' för "vinge" och ''stylis'' "pelare".

!Utseende
Man kan dela upp släktet efter hur de växer. Visa sorter finns i kolonier, andra i lösa grupper eller som enstaka plantor. De koloniformande är enklast att odla. 
Vissa av plantorna har två olika sorters skott. Det första är fruktbara skott, som får stängel och blomma, med bladen utspridda längs stängeln. Den andra sorten är sterila skott, hos vilka bladen växer i en rosett, och ingen blomstängel utvecklas.
Plantorna har vanligen en upprätt stängel med tre till åtta blad, och med en ensam blomma i toppen av stängeln. De två arterna //[[Ptst. tanypoda|c11df9b8-4b40-44bc-977d-31fac12aebee]]// och //[[Ptst. tristis|acfa8a10-5466-417a-a61f-bd9583185c2e]]// är undantag från höglandets gräsmarker. De får flera små blommor på samma stängel. Den dorsala sepalen som utgör en den egentliga blomman bildar en huva över könspelaren och pollinerna.
Majoriteten av arterna i släktet blommar från september till januari.

!Skötsel
Odlingen bör ske i en kompost bestående av två delar grov sand, till exempel pimptensgrus, en del grov lerjord och en del grova sågspån. Det är viktigt att komposten är kalkfattig. Plantera pseudobulben på tre centimeters djup, placera plantan i halvskugga och ge den en minimitemperatur av fyra till fem grader.

!Taxonomi
''Underfamilj'': Orchidoideae
''Tribus'': Diurideae
''Undertribus'': Pterostylidinae

''Typart''
//[[Ptst. curta|7a1708e7-8bf7-439d-9bab-0a39eff6214a]]// R.Brown (1810)

''Uttal''
ter-o-sty-liss

''Synonymer''
__Heterotypic Synonyms:__
//Diplodium// Swartz (1810)
//Oligochaetochilus// Szlach. (2001)
//Plumatichilos// Szlach. (2001)
//Bunochilus// D.L.Jones & M.A.Clem. (2002)
//Crangonorchis// D.L.Jones & M.A.Clem. (2002)
//Eremorchis// D.L.Jones & M.A.Clem. (2002)
//Hymenochilus// D.L.Jones & M.A.Clem. (2002)
//Linguella// D.L.Jones & M.A.Clem. (2002)
//Oligochaetochilus// Szlach. (2001)
//Petrorchis// D.L.Jones & M.A.Clem. (2002)
//Pharochilum// D.L.Jones & M.A.Clem. (2002)
//Plumatichilos// Szlach. (2001)
//Ranorchis// D.L.Jones & M.A.Clem. (2002)
//Speculantha// D.L.Jones & M.A.Clem. (2002)
//Stamnorchis// D.L.Jones & M.A.Clem. (2002)
//Taurantha// D.L.Jones & M.A.Clem. (2002)
//Urochilus// D.L.Jones & M.A.Clem. (2002)

!Rekommenderad läsning
[[Wikipedia|http://commons.wikimedia.org/wiki/Pterostylis]]
[[Australasian Native Orchid Society|http://www.anos.org.au/photos/pterostylis/pterostylis.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=grund&grupp=pterostylis&avdelning=latinsktNamn&huvudavdelning=rad]]
[[New Zealand Native Orchids|http://www.nativeorchids.co.nz/]]
[[Phils Orchid World|http://www.homestead.com/phils_orchids/files/pteropoll.html]]
[[iNetGardens|http://inetgardens.com/pterostylis.htm]]



















!Allmänt och utbredning
Denna art förekommer epifytiskt i Colombia i de västra delarna av bergskedjan Cordillerna mellan 1800 och 2200 meters höjd över havsnivån.
Den beskrevs först av Reichenbach 1883 under släktet //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]// och fick sitt namn efter J.H. Chesterton som dog snart efter sin upptäckte av arten. 1978 flyttade Dr Luer arten till det nya släktet //Dracula//.

!Utseende
//Drac. chestertonii// är en liten art med en läpp som påminner om någon sorts svamp eller en näsa. Blomman avger också en doft av svamp eller ruttnande trä som ska attrahera en liten fluga som normalt lägger sina ägg på svampar. Den sju cm stora blomman kommer ensamma på blomstängeln under sommaren eller hösten.

!Skötsel
Växten kräver kalla eller svala omgivningar, beroende på klon verkar den klara något varmare men bör odlas på den kallare delen av det intermediära temperaturspektret. På sina naturliga växtplatser i Colombias svala, höga molnskogar växer den framför allt i djup skugga längs fuktiga raviner. Odla den gärna i en luftig korg med sphagnum mossa och perlite, hängande för att låta blomstängeln leta sig ner genom komposten, ut på undersidan av korgen. När stängeln växer längre från den fuktiga mossan, tenderar den att torka om inte plantan odlas i riktigt hög luftfuktighet. Som med alla pleurothalider, kräver //Drac. chestertonii// vatten av bra kvalité för att tillväxa optimalt. Fint regnvatten eller R/O-vatten är nästan ett måste. Vattna regelbundet och håll planteringsmediet fuktigt så inte plantan tillåts torka ut.

!Synonymer
__Homotypic Synonyms:__
//Masdevallia chestertonii// Rchb.f. (1883)
__Heterotypic Synonyms:__
//Masdevallia macrochila// Regel, (1890 publ. 1891)

!Rekommenderad läsning
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/dracula_chestertonii.htm]]
[[North Jersey Orchid Society|http://www.njorchids.org/articles/Dracula/dracula.htm]]




























































!Allmänt och utbredning
Släktet //Gomesa// innehåller i skrivande stund <$view field="count"/> epifytiska arter och fem stycken naturhybrider som flyttats efter en omfattande omstrukturering efter molekylär analyser av det polyfyletiska släktet //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]//. Det är de förra oncidiumarter som återfanns i östra Brasilien och nordöstra Argentina som dessutom hade den avvikande strukturen kallad elaioforer som flyttats till släktet //Gomesa//. Elaidoforer är körtlar som utsöndrar näringsrika oljor som växterna använder för att belöna och locka pollinatörer istället för sockerlösningar som nektar.
Namnet gavs för att hedra dr B. A. Gomes, en brasiliansk botaniker som tjänstgjorde som militär kirurg i den portugesiska flottan.

!Utseende
De växer krypande på trädstammar. Blomstängeln kommer från basen av bulben, välver sig upp i en bågform för att hänga ned med en klase blommor. De ungefär två cm stora blommorna är ganska kortlivade. På engelska kallas den för ''small-man orchid'' och med lite fantasi kan man se en väldigt liten människa som sträcker sig som [[Leonardo Da Vincis ''Vitruvian Man''|http://sv.wikipedia.org/wiki/Vitruvianske_mannen]].

!Skötsel
Plantorna föredrar svala temperaturer och odlas i ljus skugga utan direkt solljus. Arterna odlas bäst monterad eller i en väldränerad kompost med exempelvis trädormbunke. Minska vattningen på vintern.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Oncidiinae

''Typart''
//[[Gom. recurva|d0687d6f-6edd-4fe5-bd47-00e15699e986]]// R. Br. (1822)

''Uttal''
goe-MEZ-ah

''Synonymer''
__Heterotypic Synonyms:__
//Coppensia// Dumort. (1835)
//Maturna// Raf. (1837)
//Physanthera// Bertero (1841)
//Baptistonia// Barb.Rodr. (1877)
//Theodorea// Barb.Rodr. (1877)
//Ornithophora// Barb.Rodr. (1882)
//Waluewa// Regel (1890)
//Rodrigueziella// Kuntze (1891)
//Binotia// Rolfe (1905)
//Rodrigueziopsis// Schltr. (1920)
//Hellerorchis// A.D.Hawkes (1959)
//Carria// V.P.Castro & K.G.Lacerda (2005)
//Alatiglossum// Baptista (2006)
//Ampliglossum// Campacci (2006)
//Anettea// Szlach. & Mytnik (2006)
//Brasilidium// Campacci (2006)
//Carenidium// Baptista (2006)
//Carriella// V.P.Castro & K.G.Lacerda (2006)
//Castroa// Guiard (2006)
//Concocidium// Romowicz & Szlach. (2006)
//Kleberiella// V.P.Castro & Cath. (2006)
//Menezesiella// Chiron & V.P.Castro (2006)
//Neoruschia// Cath. & V.P.Castro (2006)
//Rhinocerotidium// Szlach. (2006)
//Rhinocidium// Baptista (2006)
//Nitidocidium// F.Barros & V.T.Rodrigues (2010)
//Campaccia// Baptista, P.A.Harding & V.P.Castro (2011)
//Hardingia// Docha Neto & Baptista (2011)

!Rekommenderad läsning
[[Oxford Journals - Annals of Botany|http://aob.oxfordjournals.org/content/104/6/1141.full.pdf]] ''104'': 1141–1149, 2009
[[OrchidWiki|http://orchids.wikia.com/wiki/Gomesa]]
[[Taipei International Flora Exposition|http://www.taipei-expopark.tw/ct.asp?xItem=91101&ctNode=7508&mp=4]]



















































!Allmänt och utbredning
Släktet //Phragmipedium// består av <$view field="count"/> accepterade arter med några varianter och naturhybrider, som förekommer från sydvästra Mexiko, genom Centralamerika och ner till Colombia, Ecuador, Bolivia and Brasilien. De återfinns oftast i bergsomgivningar mellan 900 till 1500 meters höjd, men några förekommer ner till havsnivå och några så högt upp som 3000 meter.
Namnet kommer från grekiskans ''phragma'' som betyder "delning", och ''pedilon'' som närmast kan översättas med "toffel", och kommer från släktets karaktäristiska utseende på blommans läpp.
Det är det enda släktet i tribus Phragmipedieae och undertribus Phragmipediinae. Det är ett släkte i ständigt ommöbleringar av släkten och hybrider och det pågår fortfarande heta diskussioner men släktet består av sex sektioner.
<$reveal type="nomatch" state="$:/temp/state-64b911cb-2954-4ad9-be8b-1a5dda3a5b38" text="show">
<$button set="$:/temp/state-64b911cb-2954-4ad9-be8b-1a5dda3a5b38" setTo="show">visa mer info om sektionerna</$button></$reveal>
<$reveal type="match" state="$:/temp/state-64b911cb-2954-4ad9-be8b-1a5dda3a5b38" text="show">

;Phragmipedium @@font-weight:normal;Rolfe@@
://[[Phrag. caudatum|f8ba86f2-f427-4519-b797-9b85b6915e40]]// Rolfe (1896)
://[[Phrag. warszewiczianum|d1a7d96e-5e7f-4bad-bdf0-6e5838d3bf1a]]// Schltr. (1922)
://[[Phrag. exstaminodium|772dd8bc-3165-4600-884d-ffb564872470]]// Castaño, Hágsater & Aguirre (1984)
://[[Phrag. lindenii|fbb70608-7f92-40a8-b682-c3828360389e]]// Dressler & N.H. Williams (1975)
://[[Phrag. warszewiczianum|d1a7d96e-5e7f-4bad-bdf0-6e5838d3bf1a]]// Schltr. (1922)
;Himantopetalum @@font-weight:normal;Garay@@
://[[Phrag. caricinum|97740747-b9c8-4abc-b3df-5d8c77834375]]// Rolfe (1896)
://[[Phrag. pearcei|411dcbfb-cf57-499f-97c7-c74e61c90b70]]// Rauh & Senghas (1975)
://[[Phrag. klotzschianum|77f4bceb-bc36-4e74-8f1a-a3299392a525]]// Rolfe (1896)
://[[Phrag. richteri|7da06543-9390-4510-aac5-44043d566eb5]]// Roeth & Gruss (1994)
://[[Phrag. tetzlaffianum|32be9033-25d6-4522-87ab-709495f91c56]]// Gruss (2000)
://[[Phrag. reticulatum|dc7f2c95-9984-4517-a701-c4fa3dabc3df]]// Schltr. (1921)
;Platypetalum @@font-weight:normal;Garay@@
://[[Phrag. lindleyanum|0c121586-708a-4e36-abf4-2c6a48b47ca1]]// Rolfe (1896)
;Lorifolia @@font-weight:normal;Garay@@
://[[Phrag. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]// Rolfe (1896)
://[[Phrag. boissierianum|f44465a3-5e54-4566-9ac3-84cc1b69ab11]]// Rolfe (1896)
:://Phrag. boissierianum var. boissierianum//
:://Phrag. boissierianum var. czerwiakowianum// Gruss (1995)
://[[Phrag. hirtzii|08fd4469-1107-4197-b12e-a4648bfe1fc9]]// Dodson (1988)
://[[Phrag. vittatum|53e4073c-1fb5-454a-834b-4a3c9f32f225]]// Rolfe (1896)
://[[Phrag. brasiliense|54a01489-2b41-41ba-a3fc-209ed1dbb9eb]]// Quené & Gruss (2003)
://[[Phrag. manzurii|ebc9b10a-a2c0-439f-bef7-d49302d71513]]// W.E.Higgins & Viveros (2008)
;Micropetalum @@font-weight:normal;Garay@@
://[[Phrag. schlimii|5b712237-dcf2-4c47-896e-1d1711099790]]// Rolfe (1896)
://[[Phrag. fischeri|929bf530-becb-4d73-9e75-e4b8b31ec662]]// Braem & Mohr (1996)
://[[Phrag. andreettae|5558d8ed-a94a-4524-a339-896ed1664812]]// P.J. Cribb & Pupulin (2006)
://[[Phrag. besseae|10e52472-6423-4e9e-aab3-a7d820959329]]// Dodson & J. Kuhn (1981)
:://Phrag. besseae var. besseae//
:://Phrag. besseae var. dalessandroi// A.Moon & P.J.Cribb (1997)
;Schluckebieria @@font-weight:normal;Braem@@
://[[Phrag. kovachii|13ac8c20-500e-46f0-ab72-ab1c5101ea29]]// J.T. Atwood, Dalström & Fernandez (2002)

<$button set="$:/temp/state-64b911cb-2954-4ad9-be8b-1a5dda3a5b38" setTo="hide">dölj</$button>

</$reveal>

!Utseende
De flesta //Phragmipedium// är vanligen stora, sympodiala, terrestriska plantor, men vissa arter är epifytiska eller litofytiska till sitt växtsätt. De uppvisar en unik sköldliknande staminoid, långa mustaschliknande petaler och en stor uppsvälld säcklik läpp. De saknar pseudobulber och bladen kommer solfjädersformigt från en mycket kort stam. De sex till åtta bladen är vanligen mycket långa, upptill 80 cm, och smala, med ett veck längs hela bladets längd. Blomstängeln skjuter rakt upp från mitten av bladen och bär flera blommor som hos de flesta arter öppnas successivt. Hos några få arter öppnas alla på en gång. Hos de arter som bär ett fåtal blommor, tenderar dessa att hålla länge, upptill sex månader. När de faller av blomstängeln ser de lika vackra ut som när de var nyutslagna. Blomstorleken ökar med plantans ålder.

!Skötsel
Ljusbehovet för phragmipediumarterna går från fullt ljus, 30000 till 40000 lux för caudatum-typen med långa petaler, lika som för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, till halvskugga 15000 till 20000 lux för //[[Phrag. besseae|10e52472-6423-4e9e-aab3-a7d820959329]]// och //[[Phrag. schlimii|5b712237-dcf2-4c47-896e-1d1711099790]]//. Flesta arterna föredrar en nattemperatur mellan 15 till 18 grader, men //[[Phrag. besseae|10e52472-6423-4e9e-aab3-a7d820959329]]// och //[[Phrag. schlimii|5b712237-dcf2-4c47-896e-1d1711099790]]// kan tolerera och till och med föredrar ännu kallare. I de fallen behöver de en bara lätt fuktig kompost, inte blöt, för att inte fara illa.
Luftfuktigheten bör ligga över 50% om möjligt. Caudatum-typen är minst känslig för låg luftfuktighet, så länge bara rötterna hålls fuktiga. Konstant luftcirkulation är viktigt, speciellt i växthus kan det bidra till att förhindra uppkomsten av mögel och röta.
Bra vattenkvalité är viktigt, plantorna är känsliga för uppbyggnad av salter i komposten. Regnvatten eller R/O-vatten är bäst. Spola igenom komposten ordentligt vid varje vattning. De flesta //Phragmipedium// behöver hållas fuktiga hela tiden, caudatum-typen kan hållas lite mer på den torra sidan. Vattna underifrån eller låt krukan stå på ett fat med några cm vatten.
Vanligen klarar //Phragmipedium// mer gödning än //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]//, men om det blir för mycket blir lätt bladspetsarna bruna.
Eftersom komposten behöver hållas fuktig hela tiden bryts den snabbt ner. Den behöver därför bytas varje år. En bra kompost kan innehålla tre delar fin kompost, en del perlite, en del sphagnum-mossa och gärna en generös nypa benmjöl och kol. För plantor i stora krukor kan man blanda upp med lite grövre kompost också.

!Taxonomi
''Underfamilj'': Cypripedioideae
''Tribus'': Phragmipedieae
''Undertribus'': Phragmipediinae

''Typart''
//[[Phrag. caudatum|f8ba86f2-f427-4519-b797-9b85b6915e40]]// Rolfe (1896)

''Uttal''
fraig-mi-PEE-dee-um

''Synonymer''
__Heterotypic Synonyms:__
//Uropedium// Lindley (1846)
//Phragmopedilum// Rolfe (1901)

!Rekommenderad läsning 
[[Wikipedia|http://en.wikipedia.org/wiki/Phragmipedium]]
[[PhragWeb|http://www.phragweb.info/phragmipedium/genus/genus_phrag.asp]]
[[CultureSheet|http://culturesheet.org/orchidaceae:phragmipedium]]
[[the Orchid House|http://retirees.uwaterloo.ca/~jerry/orchids/cnotes/phrag.html]]
[[Carter and Holmes|http://www.carterandholmes.com/phragcare.html]]
























''Etymology:'' 
Named after Henri Guillaume Galeotti (1814-58), a Belgian collector who assembled the finest and most complete sample of specimens (and many illustrations) of Mexican orchids during the nineteenth century. In partnership with Achille Richard he described many of his own discoveries.











































































!Allmänt och utbredning
//Paph. sangii// är en art endemisk för Celebes på norra Sulawesi, Indonesien. Den växer i bergsskogar eller på öppna grässlätter mellan 1000 och 1200 meters höjd. Den är nyligen upptäckt och är ännu ovanlig i odling. Den har ett säreget utseende och kan vara svår att få i blom.
Den är döpt efter Sang, en tysk orkidéntusiast.

!Utseende
De bildar väldigt tunna blad. Den blommar under senhösten till senvåren på en upprätt, mörkt brun blomstängel som är kraftigt hårig. Den blir över 20 cm lång och bär en ensam blomma.

!Skötsel
Det är en sval- till varmväxande epifyt. De är långsamma att tillväxa och bli blomstora. I naturen är de utsatta för kraftiga regn från höst till vår och mer sporadiska regnskurar under sommar månaderna. Håll den ljust utan direkt sol eller i en ljus halvskugga. De tycker om mycket hög luftfuktighet och -cirkulation hela året om.
Använd en väldränerande medelgrov barkkompost med inblandning av perlit, leca och sphagnum. En del odlare har haft framgång med odling i ren, levande sphagnum. Till skillnad från många andra paphiopedilumarter är den inte känslig för uppbyggnad av salter i komposten.
För att inducera blomning, minska vattningen under vintern.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum sangii// var. //ayubianum// O.Gruss & Roeth (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphsangii.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_sangii]]



































































































































































































































!Allmänt och utbredning
Arten är endemisk för Filippinerna, framförallt Luzon och omkringliggande öar. Den har rapporterats insamlad från några skogar på Lombok Island, några lokaler på Sukabumi på södra kusten av västra Java, Tawangmangu på centrala Java och Gunung Kidul på södra kusten av centrala Java.
Den växer högt upp i träden på fuktiga regnskogssluttningar från havsnivå upp till 400 meter över havet.
Det är en tetraploid form med stelare blad och större blommor än andra arter inom //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]//.
I Filippinerna kallas arten ''tigre'' för sina tigerstrimmiga blad.

!Utseende
Bladen är upptill 25 cm långa, ovalt avlånga nedhängande, mörkt gröna med oregelbundna grå eller silverfärgade ränder på ovansidan. På undersidan är bladen purpurfärgade. Rötterna är köttiga och tillplattade, inte rundade som hos andra av släktet //Phalaenopsis//.
Den grenade blomstängeln kommer på vintern eller våren, och kan vara en meter lång med mer än 200 blommor. Den blommar vanligtvis under februari till april. Blommorna är sju cm stora, rosa med rödbruna fläckar med en gul kallus. Läppen är vit, tonad i gult och fläckad i brunrött, med utmärkande, djupt tre flikad horn.

!Skötsel
Arten växer gärna i ett skuggigt fönster åt norr. Den vill ha varmt hela året. Håll dagstemperaturen runt 25 till 30 grader, och nattemperaturen minst 18 grader. Under vintervilan kan nattemperaturen gå ner till 13 grader, men håll den diurnala temperaturväxlingen minst tio grader.
Sörj för jämn luftfuktighet och låt inte plantan torka ut helt. Under tillväxtperioden behöver plantan rejält med vatten och näring varje eller varannan vecka för att utvecklas ordentligt. När bladtillväxten minskar på vintern, kan vattningen reduceras något och gödslingen upphöra helt under ett par månaderna.
Även om det går utmärkt att odla arten i väldränerade krukor eller hängande korgar, verkar den trivas bättre monterad på en horisontell bit kork, eller ännu hellre i en sphagnumkorg hängande på snedden. Komposten i en kruka bör bestå av fin eller medelgrov bark, med tillsatser av lecakulor, ormbunksfibrer och sphagnum. Låt plantan luta så mycket som möjligt, med bladen hängande över kanten. I en korg är osmunda eller sphagnum, med tillsatser av ormbunksfibrer eller bark, det bästa. Vid montering kan man använda kork eller stora stycken osmunda. Omplantering är bäst under våren efter blomningen, när rötterna tillväxer.

!Synonymer
__Heterotypic Synonyms:__
//Phalaenopsis schilleriana// var. //viridimaculata// Duch. (1862)
//Phalaenopsis schilleriana// var. //immaculata// Rchb.f. (1875)
//Phalaenopsis schilleriana// var. //delicata// Dean (1877)
//Phalaenopsis schilleriana// var. //splendens// R.Warner (1878)
//Phalaenopsis schilleriana// var. //advena// Rchb.f. (1885)
//Phalaenopsis schilleriana// var. //major// Hook.f. (1886)
//Phalaenopsis schilleriana// subvar. //immaculata// A.H.Kent (1891)
//Phalaenopsis schilleriana// var. //purpurea// O´Brien (1892)
//Phalaenopsis schilleriana// var. //grandiflora// Brero (1935) nom. inval.
//Phalaenopsis schilleriana// var. //odorata// Brero (1935) nom. inval.
//Phalaenopsis schilleriana// var. //pallida// Valmayor & D.Tiu (1983)
//Phalaenopsis schilleriana// f. //immaculata// Christenson (2001)
//Phalaenopsis schilleriana// f. //purpurea// O.Gruss & M.Wolff (2007)
//Phalaenopsis schilleriana// f. //splendens// O.Gruss & M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phlalschilleriana.htm]]
[[Phalaenopsis Orchids|http://www.phals.net/schilleriana/index_e.html]]
[[Ann Arbor Orchid Society|http://angrek.com/AAOS/Past/9801/Txt/Phals.html]]
[[Especes de Phalaenopsis|http://perso.wanadoo.fr/bernard.lagrelle/Schilleriana/anglais/Phalaenopsis%20schilleriana%20anglais.htm]] spanska sida på engelska


!Allmänt och utbredning
Det är ett släkte med <$view field="count"/> accepterade arter från Indien, Kina, Malaysia, Filippinerna, Indonesien, New Guinea och delstaten Queensland i Australien som växer på altituder under 1800 meters höjd.
Släktnamnet //Schoenorchis// härstammar från de grekiska orden ''schoenos'', "vass" eller "starr" och ''orchis'', "orkidé", efter typartens starrliknande blad.

!Utseende
Det är små eller medelstora monopodiala epifyter utan pseudobulber, med upprätt eller hängande växtsätt. De har otaliga tunna rötter och en tunn stam, upptill 30 cm lång. De köttiga, långsmala, runda eller platta bladen kommer vanligen i två rader, tätt tillsammans eller utspritt på stammen, i vissa fall solfjädersformigt. Blomstängeln som kommer under vintern eller våren är kort och ibland grenad. De vita eller röda blommorna är små, doftande, ofta rörformade, håller flera dagar och kommer tätt tillsammans i en kompakt blomställning. Könspelaren är kort, utan fot. Arterna kan pollineras av bin eller vara självpollinerande. Tiden från pollinering till fröna är mogna kan ta upptill ett år.

!Skötsel
De odlas bäst hängd i korgar eller monterade med vitmossa och kräver vanligen fullt solljus och intermediära till varma temperaturer. Arter med blad som är runda i genomskärning behöver vatten regelbundet hela året, låt inte komposten torka ut helt. Arter med breda, platta blad behöver torka upp helt mellan vattningarna.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Vandeae
''Undertribus'': Aeridinae

''Typart''
//[[Sns. juncifolia|6b7c251b-d4b8-496c-a10e-c8ed2f2376ae]]//  Blume (1825)

''Uttal''
shoan-OR-kis

''Synonymer''
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/schoenorchis.htm]] 2014-12-22
[[Lucid Key Server|http://keys.trin.org.au/key-server/data/08090a09-0d0e-410b-860c-020705070e0e/media/Html/genera/Schoenorchis.htm]] 2014-12-18
[[Papua New Guinea Orchid News|http://www.orchidspng.com/Schoenorchis.html]] 2014-12-18
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=129640]] 2014-12-18





!Allmänt och utbredning
Denna epifytiska miniatyrart kommer från de svala, fuktiga bergsskogarna i Ecuador och Peru mellan 2700 och 3250 meters höjd.
Den är döpt för att hedra den amerikanske orkidésamlaren Hutchison från den senare delen av 1800-talet.

!Utseende
De ovalt avlånga pseudobulberna kommer på en kort stam, omsluten av flera bladstjälkar. I toppen av bulben kommer ett ensamt, avlångt blad. Den upptill sex cm långa blomstängeln kommer under hösten till våren och kan successivt bära fem till sex stora, gula blommor.

!Skötsel
I dess naturliga habitat går temperaturen antagligen inte över 24 grader någon gång under året. De växer i fuktig men inte blöt miljö med hög luftfuktighet och god luftcirkulation, så det är det man måste efterlikna. Det enklaste är att odla dem monterade men vissa odlare har även rapporterat framgångar med krukodling.
Sniglar och snäckor älskar de mjuka och köttiga växtdelarna så var extra uppmärksam.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/telhutchisoni.htm]]

































































































































































!Allmänt och utbredning
Arten växer i topparna av mossiga träd i Ecuador, Bolivia och Brasiliens våta, tropiska skogar mellan 350 och 600 meters höjd över havet.

!Utseende
Det är en mattbildande miniatyrart. Det korta rhizomet bildar välavgränsade, ovala pseudobulber. Bulberna flankeras av tre gräsliknande blad.
Under hösten eller vintern kommer en kort, bara en eller två cm lång, stängel från basen av en mogen bulb. Stängeln bär en ensam, doftande blomma nära bulben. Arten bär ovanliga och uppseendeväckande, glänsande, rödbruna blommor med en vit läpp.

!Skötsel
Det är en varmt växande planta. Den har ett hängande växtsätt, så den kan med fördel odlas monterad eller i en hängande kruka. Ge den en växtplats med hög luftfuktighet och halvskugga.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria paranaensis// Barb.Rodr. (1882)
__Heterotypic Synonyms:__
//Maxillaria acicularis// var. //brevifolia// Cogn. (1904)
//Maxillaria spegazziniana// Kraenzl. (1908)
//Maxillaria juergensii// Schlechter (1925)
//Maxillaria cogniauxiana// Hoehne (1933 publ. 1934)
//Maxillaria cogniauxiana// var. //longifolia// Hoehne (1934)
//Maxillaria heterophylla// Hoehne (1952)
//Maxillaria heterophylla// var. //acicularifolia// Hoehne (1952)
//Maxillaria heterophylla// var. //intermedia// Hoehne (1952)
//Maxillaria heterophylla// var. //latifolia// Hoehne (1952)
//Maxillaria heterophylla// var.// longifolia// Hoehne (1952)
//Maxillaria heterophylla// var. //magnifolia// Hoehne (1952)
//Maxillaria heterophylla// var. //pygmaea// Hoehne (1952)
//Maxillaria cogniauxiana// var. //intermedia// Hoehne (1967)
//Maxillaria cogniauxiana// var. //latifolia// Pabst (1972)
//Maxillaria cogniauxiana// var. //pygmaea// Pabst (1978)
//Christensonella cogniauxiana// Szlach., Mytnik, G??rniak & Smiszek (2006)
//Christensonella juergensii// Szlach., Mytnik, G??rniak & Smiszek (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxjuergensi.htm]]























































































!Allmänt och utbredning
//Epistephium// är ett litet, terrestriskt släkte med <$view field="count"/> arter hemmahörande framförallt i Sydamerika, söderut till Paraguay och södra Brasilien, med ett fåtal arter i Belize och Trinidad. De växer i allmänhet varmt och ljust, och deras naturliga miljö varierar från öppna gräsmarker och prärier till varma och fuktiga låglandsregnskogar.
De är nära besläktade med //[[Eriaxis|b0792eea-d5ae-4375-8b94-2ca8a636ccad]]// och //[[Clematepistephium|3c2e0b25-775d-44e0-8d1f-5e8a6c3ca666]]// från Nya Kaledonien som i sin tur är närbesläktade med släkten från Australasien. Det kan tyda på att orkidésläktet utvecklades innan upplösningen av [[Gondwana|https://sv.wikipedia.org/wiki/Gondwana]], betydligt tidigare tidigare än vad som traditionellt trotts.
Namnet kommer från det grekiska ''epi'', "på", och ''stephanos'' som betyder "krönt", med hänvisning till kransen vid spetsen av fruktämnet.

!Utseende
De är oftast stora, sockerrörsliknande växter, upp till fem eller sex meter höga, som mest påminner om kraftigt förgrenande buskar snarare än hur man vanligen föreställer sig orkidéer. Stammarna kan växa horisontellt nära basen av plantorna, liksom ett rhizom, innan de börjar växa vertikalt. Det kan därför vara ödesdigert att dela plantor i vad som verkar vara ett rhizom. I toppen av stammen kommer en blomställning med flera blommor som slår ut successivt. Blommorna är stora, färgglada, ofta färgade i lavendel eller magenta, men är tunna och kortlivade.
Blommorna och allmänna utseendet hos //Epistephium// liknar det hos //[[Sobralia|6926d277-9499-446f-8773-f0aebf48e10c]]//, men de är inte släkt. Bladen är helt annorlunda, hos //Epistephium// är de glänsande, läderartade  med en ovanlig förgrenad, nätliknande nervatur, inte med parallella nerver som hos //[[Sobralia|6926d277-9499-446f-8773-f0aebf48e10c]]//.

!Skötsel
De är ganska ovanliga i odling då alla arterna blir ganska stora. Troligen behöver de gott om utrymme, värme och ljus. I naturen kan de växa i full sol.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Epis. elatum|c899ee85-606e-4b8f-866e-4caaef275d35]]// Kunth (1822)

----
''Uttal''
ep-i-ste'-fi-um

----
''Synonymer''
N/A

!Rekommenderad läsning
[[The Sobralia Page|http://sobralia.autrevie.com/Epistephium_TheGenus.html]] 2015-12-23

;Dariusz L. Szlachetko, Joanna Mytnik-Ejsmont & Przemyslaw Baranow, 2013,
://New species of the genus //Epistephium// (Orchidaceae, Vanilloideae)//
:Plant Systematics and Evolution vol. 299, nr 5, maj 2013, doi 10.1007/s00606-013-0815-9




















































!Allmänt och utbredning
Denna varmväxande miniatyrart påträffas epifytiskt endast i västra Colombia och Ecuadors fuktiga bergsskogar mellan 450 och 1500 meters höjd över havet.
Artepitetet härrör från grekiskans ''calodictyon'' som betyder "vackert nät" och anspelar förstås på bladens fantastiska nervatur.

!Utseende
De saknar pseudobulber utan de upptill två cm stora bladen kommer på en kort stjälk direkt från en underjordisk stam. Bladen är lime- eller smaragdgröna med ett nät i klarrött dekorerande ovansidan. De tre till fyra mm stora blommorna kommer på en kort blomstjälk på ovansidan av bladen. Blommorna kommer en och en på stängeln och öppnas successivt när som helst under året.

!Skötsel
Håll plantan i halvskugga och i hög luftfuktighet mellan 14 och 25 grader. För bästa odlingsresultat bör den vattnas med RO-vatten eller regnvatten av bra kvalité. Plantera den i en mix av fin barkkompost med perlite och sphagnum eller monterad. Vattna regelbundet och håll komposten fuktig.

!Synonymer
__Heterotypic Synonyms:__
//Stelis calodyction// Spruce (1862)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lepcalodictyon.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Lepanthes_calodictyon]]
























































































!Allmänt och utbredning
//Psh. vitellina// [pros-THEE-kee-ah vy-tel-LY-nuh] är en epifytisk art från Mexiko, Nicaragua och Honduras molnskogar där den växer i buskområden, ek- eller tallskogar mellan 1400 och 2600 meters höjd.

!Utseende
Det är en medelstor art som bildar avlånga, från sidorna tillplattade pseudobulber två till sju cm stora, med två upptill 22 cm långa och en till fyra cm breda, blågrågröna blad i toppen. Under vår till höst kommer en 15 till 45 cm lång, upprätt blomstängel som kan vara enkel eller förgrenad. Blomställningen bär fyra till 20 stycken samtidigt öppna, tre cm stora blommor. Blommorna är intensivt orange med en liten, klargul läpp. Varje blomma varar många månader och nya blommor bildas successivt i takt med att blomställningen fortsätter växa.

!Skötsel
Sommartid bör den skuggas för den starkaste solen mitt på dagen och nattemperaturer under tio grader, den kan gärna stå utomhus med de naturliga temperaturväxlingarna mellan dag och natt. //Psh. vitellina// är den svalaste växande arten inom släktet. Håll den jämnt fuktig utan att vara ständigt blöt. Ge den en sval och så ljus vinter som möjligt med sparsam vattning. De behöver en torr vintervila minst en månad tills de nya skotten kommer tidigt på våren.
Bäst är att odla den monterad eller i små krukor med en väldränerad mix av medelgrov barkkompost, eller ren sphagnum som får torka upp lätt mellan vattningarna.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum vitellinum// Lindley (1831)
//Encyclia vitellina// Dressler (1961)
//Pseudencyclia vitellina// V.P.Castro & Chiron (2003)
__Heterotypic Synonyms:__
//Epidendrum vitellinum// var. //giganteum// R.Warner (1878)
//Epidendrum vitellinum// var. //majus// B.S.Williams & T.Moore (1882)
//Epidendrum vitellinum// var. //autumnale// G.Wilson (1913)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/prosvitellina.htm]] 2015-09-01
[[OrkidéHuset|http://orchidehuset.se/index.php/prostechea-vitellina]] 2015-09-01
[[Orchids Wiki|http://orchids.wikia.com/wiki/Prosthechea_vitellina]] 2015-09-01
[[OrchidKarma|http://orchidkarma.com/prosthechea-vitellina/]] 2015-09-01

!Allmänt och utbredning
Det är en liten terrestrisk och litofytisk art från sydöstra Vietnam som växer i ständigt gröna låglandskogar eller primära höglandsmolnskogar på silikatrika eller sura jordar på öst- och sydliga granitsluttningar nära vatten på mellan 750 och 1500 meters höjd.
Till helt nyligen troddes det att den upptäcktes någon gång mellan 1913 och 1914 av en återvändande militärofficer från Tonkin i norra Vietnam som skickade den till M. Delenat, föreståndare för trädgården Palace of St. Germain-en-Layes nära St. Cloud, Frankrike. Eftersom //Paph. delenatii// är endemisk för södra Vietnamn tror man numera att det var en planta av arten //[[Paph. vietnamense|c0dbd559-e92c-4ec7-a267-2c3c7c1b6ebb]]// som nyligen upptäcktes i norra Vietnamn. //Paph. delenatii// upptäcktes egentligen 1922 av den franske samlaren Poilane som skickade tillbaka några plantor till Frankrike där den visades på utställningar 1924 och 1925 av M. Mornay, föreståndaren för Paris kommunala trädgårdar och beskrevs elva år senare av André Guillaumin. Den troddes utrotad i det vilda tills den återupptäcktes nära Nha Trang i Vietnam 1993. Innan dess var alla plantor avkommor till den enda överlevande av de två moderplantor som kom till Europa. En sändes till Kew Gardens som dog kort därpå, och en planta sändes till den franska firman Vacherot & Lecoufle där de lyckades föröka den.
//Paphiopedilum delanatii// är namngiven efter den franske 1800- och 1900-tals orkidéntusiasten M. Delenat som var föreståndare för trädgården Palace of St. Germain-en-Layes nära St. Cloud, Frankrike under de första årtionden på 1900-talet.

!Utseende
Den får fem till sju långsmala blad i en solfjäderformig bladrosett. Bladen blir elva cm långa och tre till fyra cm breda, en ganska kompakt planta. Bladen är ljust gröna med nerver och mönstring i mörkgrönt och purpurfärgade markringar på undersidan. Den upptill 20 cm långa, lilaaktiga blomstängeln är tätt försedd med vita hår och kommer från mitten av en vuxen bladrosett. Den kommer vanligen under senhösten till tidig vår, i naturen oftast under december men i odling vanligen senare, och bär en eller två, i väldigt sällsynta fall till och med tre, svagt rosendoftande blommor. Blommorna är åtta cm stora med en ljust till mörkt rosa säckformad läpp och runda, vita petaler. Staminoiden är vit med gula och röda markeringar. Det finns även en rent vit form, f. //albinum//, som saknar all rödlila pigmentering på blad, blomstängel och blomma. Blommorna är hållbara i upptill två månader.

!Skötsel
I sin naturliga miljö växer de i varm halvskugga på sura jordar med kraftiga regn under sommaren och bara en allmänt hög luftfuktighet med riklig dimma under höst- och vinterhalvåret. Vintertemperaturen ligger mellan 13 och 22 grader medan den under sommaren kan gå upp till mellan 17 och 28 grader.
Vattna mindre mellan januari till maj, resten av året hålls plantan lätt fuktig men inte blöt. Under de varma sommarmånaderna bör den inte torka ut under längre perioder. Enligt vissa odlare behöver arten en distingt viloperiod med långa, ljusa dagar för att blomma.
De vill ha samma ljusförhållanden som //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]//, mellan 7000 till 10000 lux, ett östfönster är idealiskt. Under natten föredrar den en temperatur runt 18 grader som gärna får stiga till mellan 25 och 30 grader under dagen. Plantan föredrar en luftfuktighet över 50% och bra luftcirkulation. Ge en svag dod gödning med varje vattning och skölj igenom komposten med rent vatten en gång i månaden för att förhindra att det byggs upp höga salthalter.
Plantera om varje vår i plastkruka med en väldränerande medelgrov kompost. Nedbruten kompost tolereras dåligt, rötterna ruttnar snabbt.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium delenatii// C.H.Curtis (1931)
__Heterotypic Synonyms:__
//Paphiopedilum delenatii// f. //albinum// Braem (1998)
//Paphiopedilum delenatii// f. //vinicolor// O.Gruss & Roeth (2007)
//Paphiopedilum delenatii// f. //lutescens// Grell & Gunzenh. (2010)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphdelanati.htm]]
[[Argus Orchids|http://www.argusorchids.net/images/photopages/p_delenatii.htm]]
[[OrchidSpeciesCulture|http://www.orchidculture.com/COD/FREE/Paph_arm_Art.html]]
[[SlipperOrchids|http://www.slipperorchids.info/paphdatasheets/parvisepalum/delenatii/index.html]]
[[Orchid Species Bulletin|http://www.yonggee.name/Notes/Paph_delenatii.htm]]
[[Gore Orchid Conservatory|http://www.goreorchidconservatory.com/SpecPgs/Paph-delenatii.html]]










































General description: 
Epiphytic herbs. Roots slightly flattened. Stems inconspicuous. Leaves crowded, 2.5–7.0 × 0.9–1.9 cm, oblong to elliptic, unequally obtusely bilobed, often heavily suffused purple, especially on reverse and base. Inflorescences borne among roots, suberect to descending; peduncle not compressed; rachis 7–20-flowered, flowers opening in succession. Flowers resupinate, 7–8 mm long, 9–10 mm wide, sepals and petals greenish white to pale brownish cream, labellum white, side lobes with red margins and several broad, longitudinal, red stripes, spur externally gold, internally yellow, column white with a red V below stigma. Sepals free, dorsal sepal erect with a concave, decurved apex, lateral sepals horizontal, the lower margin at base recurved and resting against spur. Petals with erose distal margins. Labellum trilobed, solidly attached to column foot, spurred, side lobes obliquely erect, quadrate, recurved at front, midlobe porrect, ovate, margins erose, basal third occupied by a papillose transverse thickening, a low median ridge in proximal half, hypochile with two parallel, spiculate, ridge-like keels that extend backward from midlobe onto floor of spur where a third, teardrop-shaped, spiculate keel lies between them; spur inverted subglobose, distinctly compressed dorsally at base. Column porrect, foot a downward-projecting plate that lies across spur aperture and partly closes it, isosceles-trapezoid; stelidia absent; anther cap cucullate, with a drawn-out linear base; pollinia two, each deeply cleft, stipe 2.5 mm long, linear, distal quarter expanded, obovate, concave, viscidium canaliculate; stigmatic cavity large; rostellum projection 2 mm long, linear, extending backward across stigmatic cavity.
Distribution: 
Eclecticus is monospecific and found in Thailand, Laos, and Cambodia.
Ecology: 
Nothing is known of the habitat of this species.
Taxonomic Notes: 
Eclecticus looks superficially like a species of Kingidium, now included in Phalaenopsis. Closer examination reveals characters that indicate an affinity with disparate genera in Aeridinae. The thickened rachis is found in a number of genera including Chroniochilus and Gastrochilus, but those have different pollinia. The inflorescence and pollinia of Eclecticus resemble those found in Thrixspermum sect. Dendrocolla, but that section has ephemeral flowers with a different labellum structure. The flower shape might show an affinity with Lesliea (now included in Phalaenopsis) or Smitinandia, but both of those have a different arrangement of calli on the labellum. The elongated rostellum projection resting across the stigmatic cavity resembles Rhynchogyna, which is allied to Cleisostoma and has a large callus on the back wall of the spur.

!Allmänt och utbredning
Arten hittas växande epifytiskt och litofytiskt längs vattendrag i ständigtgröna låglands- och bergsskogar i nordöstra Indien, Burma, södra Kina, Laos, Vietnam, Thailand och malaysiska övärlden på höjder mellan 600 och 1000 meter.
Artnamnet kommer från latinets ''visco'' som betyder "klister" som skulle hänvisa till någon oklar "klistrig" egenskap.

!Utseende
De många små ovala eller spolformiga pseudobulberna kommer tätt tillsammans och bildar en kompakt, gräsrugge-liknande planta. Artens äldre, synonyma artnamn //graminifolia// betyder just "gräslik". Bulberna är vid basen omslutna av torra, bruna täckblad, blir fyra till sju cm långa, upptill tre cm breda och bär i toppen två långsmala, lansettlika, upprätta eller hängande blad som blir mellan 25 och 50 cm långa och en cm breda. Äldre bulber gulnar ofta och får längsgående räfflor. Under vintern kommer från basen av de nyaste bulberna en sex till 15 cm lång blomstängel som bär två till sju stycken samtidigt öppna, sex cm stora blommor. De doftande blommorna har rent vita sepaler och petaler med läppen mot basen i olika nyanser av gult och orange med bruna strimmor. Blommorna håller tio till 15 dagar.

!Skötsel
Det är en tuff planta som är lätt att odla i svala eller intermediära temperaturer så länge nattemperaturen inte går under tio grader på vintern. Ge den hög luftfuktighet och god luftcirkulation i halvskugga med regelbunden vattning under de varma sommarmånaderna. Vintertid kan vattningen reduceras något men den bör inte få torka ut under någon längre tid. Om luftfuktigheten är för låg torkar bladspetsarna. Odla den i en väldränerad, medelgrov barkkompost i hängande korgar som låter blommorna hänga fritt över kanten. 

!Synonymer
__Homotypic Synonyms:__
//Pleione viscosa// Kuntze (1891)
__Heterotypic Synonyms:__
//Coelogyne graminifolia// C.S.P.Parish & Rchb.f. (1874)
//Pleione graminifolia// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelviscosa.htm]]
[[Coelogynes.com|http://coelogynes.com/Species%20Coel%20viscosa.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Coelogyne_viscosa]]
[[Orchid photographs by Gary Yong Gee|http://www.yonggee.name/Notes/Coelog_viscosa.htm]]





































































!Allmänt och utbredning
//Paph. superbiens// [paf-ee-oh-PED-ih-lum soo-PER-bee-enz] återfinns på norra och västra delen av Sumatra, nära Padang till Mount Ophir, där den växer terrestriskt i barrskogar på sandstensklippor, ofta nära rinnande vatten mellan 900 och 1300 meters höjd men har rapporterats växa så högt upp som 2200 meter. Den är sällsynt i naturen med troligen mindre än 250 vuxna individer och har minskat med 80% senaste tre generationerna.
Namnet härstammar från det latinska ''superus'' efter blommans storlek och skönheten. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Loripetalum. Kromosomtalet är 2n=38.

!Utseende
Den bildar fyra till fem avlånga blad, 15 till 24 cm långa och tre till sju cm breda, på ovansidan mönstrade i mörkt blågrönt och ljust vitgrönt. Undersidan är mot basen översållad av purpurfärgade prickar. Under juni och juli kommer en upptill 30 cm lång blomstängel som bär en eller två stycken tio cm stora blommor. Blomman har en djup chokladbrun läpp, den dorsala sepalen är vit och gröna med rödbruna nerver. De nedhängande, bakåtvridna petalerna är bronsfärgade med rödbruna prickar och tunna hår längs kanterna. Blommorna står länge och kan hålla upptill två månader.

!Skötsel
Området där de växer utsätts för kraftiga regn från vinter till vår och lätta regn från sommar till höst. Ge dem ljus skugga, hög luftfuktighet och intermediära till varma temperaturer. För mycket ljus ger bleka blad, för lite ljus ger mörka, sladdriga blad. Odla i en väldränerad mix medelgrov barkkompost och en tredjedel perlit. För att inducera blomning, minska vattningen och sänk temperaturen under vintern.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium superbiens Rchb.f.(1855)
//Cordula superbiens Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium barbatum// var. //veitchii// Van Houtte (1861)
//Cypripedium veitchianum// Lem. (1865)
//Paphiopedilum veitchianum// Lem. (1865)
//Cypripedium barbatum// var. //superbum// E.Morren (1883)
//Cypripedium curtisii// Rchb.f.(1883)
//Paphiopedilum curtisii// Stein (1892)
//Cordula curtisii// Rolfe (1912)
//Cypripedium curtisii// var. //sanderae// Curtis (1915)
//Paphiopedilum superbiens// f. //sanderae// M.W.Wood (1975)
//Paphiopedilum superbiens// var. //curtisii// Braem (1988)
//Paphiopedilum superbiens// var. //sanderae// Braem (1988)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphsuperbiens.htm]] 2015-08-26
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/superbiens/index.html]] 2015-08-26
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_superbiens]] 2015-08-26


























































!Allmänt och utbredning
Den terrestrisk arten //[[Eri. rigida|6cca8292-1e47-4438-b7c8-e79ae681b850]]//, den enda arten inom släktet, är endemisk för öppna, ultrabasiska gräsmarker på Nya Kaledonien mellan 150 och 700 meters höjd. Mer sällan kan den även förekomma över 1250 m.
Den är närmast släkt med //[[Clematepistephium|3c2e0b25-775d-44e0-8d1f-5e8a6c3ca666]]//, också ett monotypiskt släkte från Nya Kaledonien som växer som klättrande rankor i regnskogen. De båda släktenas två arter ansågs tidigare tillhöra det numera uteslutande sydamerikanska släktet //[[Epistephium|69fa6428-35f8-4da4-8d42-eca4f3a7eb10]]//.

!Utseende
Den är olik alla andra arter inom underfamiljen //Vanilloideae//. Den upprätta, ibland grenade, stammen kan bli över en meter lång och är ihålig med långa, tjocka, spröda rötter. Bladen är styva, läderartade. I toppen av stammen kommer under våren en klase med många, tre till fem cm stora, kortlivade blommor som slår ut en eller två åt gången succesivt efter varandra. De tre sepalerna är vita med brunt mot toppen, alla i samma storlek och med en hårig undersida. Petalerna är vita eller ljusrosa, oval och hårlösa. Läppen är treflikig, vit och har en purpurfärgad kant. Längs läppen sträcker sig centralt en serie gulaktiga åsar och borst. Liksom sepalerna är frökapseln täckt av tjockt, tätt, vitt hår, möjligen som ett skydd mot solen.

!Skötsel
De växer i full sol på näringsfattiga marker och är i det närmaste omöjlig att få att tillväxa i odling utanför sitt naturliga utbredningsområde.

!Synonymer
__Homotypic Synonyms:__
//Galeola rigida// Benth. & Hook.f. (1883)
__Heterotypic Synonyms:__
//Epistephium regis-alberti// Kraenzl. (1900)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/eriaxrigida.htm]] 2015-12-29





















































































































































!Allmänt och utbredning
Nästan alla arter i släktet är små krypande epifyter eller litofyter som lever långt ner i mossan i markplanet på hög höjd i molnskogar på ögruppen Antillerna i Karibiska övärlden och från Mexiko i söder till Bolivia med att fåtal arter i Brasilien.
I skrivande stund innehåller släktet <$view field="count"/> accepterade art som alla är svåra att särskilja på grund av sin ringa storlek, komplexa blomuppbyggnad och otillgängliga habitat. Det är ett släkte som inte är speciellt väl undersökt eller beskrivet. 2009 hittade ett team från [[Lankester Botanical Garden|http://www.lankesteriana.ucr.ac.cr/PUBlankester/Table%20of%20contents/Lankesteriana%209%283%292010/pupulin_bogarin_smith2010.html]] tre hitintills okända arter i Costa Rica.
Enligt [[nya undersökningar|http://aob.oxfordjournals.org/content/95/5/763.full.pdf]] verkar som om åtminstone delar av arterna i släktet använder sig av pseudokopulation för sin förökning
Översatt från grekiskan betyder namnet närmast "fjäll-lika blommor".

!Utseende
De har små blommor som sitter inbäddade tätt intill där det, vanligen, ensamma bladet fäster mot bladstjälken. Stjälken är oftast ringad av omslutande småblad. De mångfärgade blommorna kommer vanligast i succession under längre tid. Läppen är så specialiserad att det krävs en egen terminologi. Blommorna som kan komma när som helst på året är oftast kortlivade.

!Skötsel
På den höga höjden i de svala molnskogarna där de flesta arterna i släktet växer, varierar dygnstemperaturen med bara två eller tre grader.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//Epidendrum ovale// Swartz (1799) synonym till //[[Lths. ovalis|c5e0929a-0934-4d4b-b1db-6f7feaf54c2b]]// Fawc. & Rendle (1910)

''Uttal''
le-PAN-theez

''Synonymer''
__Heterotypic Synonyms:__
//Brachycladium// Luer (2005), non Corda (1838) fungi.
//Neooreophilus// Archila (2009)
//Oreophilus// W.E.Higgins & Archila (2009)
//Penducella// Luer & Thoerle (2010)

!Rekommenderad läsning
[[The Species Orchid Society of Western Australia|http://members.iinet.net.au/~emntee/Lepanthes.htm]]
[[Lankesteriana|http://www.lankesteriana.ucr.ac.cr/PUBlankester/Table%20of%20contents/Lankesteriana%209%283%292010/pupulin_bogarin_smith2010.html]]
[[Annals of Botany 95: 763–772, 2005|http://aob.oxfordjournals.org/content/95/5/763.full.pdf]]























































































































!Allmänt och utbredning
//Cattleya sincorana//, som fram till 2008 tillhörde släktet //[[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]//, växer epifytiskt främst på stammarna hos xerofytiska buskar av släktet //Vellozia// i torra och karga sandstensområden i Serra de Sincorá och i Serra de Capa Bode i Brasilien mellan 1100 till 1500 meter över havet. De kan också växa litofytiskt i klippsprickor som utsätts för direkt solljus. Eftersom regn är ovanliga kommer det mesta av fukten de får från dimma och kondensation.
Arten upptäcktes första gången 1908 av Ernst Ule men betraktades länge som utrotad innan den återupptäcktes i slutet av 1960-talet.

!Utseende
Plantorna är små, med korta, tillplattade pseudobulber som bär ett enda stelt, köttigt blad. De läderaktiga bladen är mörkt gröna. Bulberna blir i naturen oftast högst två cm stora i utsatta lägen men kan i odling bli mer än det dubbla. I sitt naturliga habitar i Brasilien blommar de under vintern, men i odling på norra hemisfären kommer blommorna under våren från en kort, upptill sex cm lång, blomstängel på det nya skottet. Stängeln bär en till fyra tio cm stora blommor. Blommorna hos //C. sincorana// är välformade och med klara färger i rosa eller purpur nyanser med mörkare nerver. Det finns även blåa, //coerulea//, och vita, //alba//, former av arten.

!Skötsel
//Cattleya sincorana// är en adaptiv art som är lätt att få att växa om dess behov kan tillgodoses. Dock har de en olycklig tendens att vara svåra att få att blomma.
De föredrar intermediära temperaturer som de flesta inom släktet //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]// och dess hybrider. I Brasilien tillväxer de under regnperioden mellan oktober och januari, resten av året lever de av den dagliga daggen som kondenseras ur luftens fuktighet.
De odlas med fördel i oorganisk kompost som dränerar bra, till exempel Leca eller lavasten, men en kompost med grov bark och en stor del grus eller monterade fungerar också. Rötterna behöver torka upp ganska fort efter vattningen annars är risken för rotröta stor. Under vinter behöver de en nästan helt torr viloperiod, bara regelbundna duschar.

!Synonymer
__Homotypic Synonyms:__
//Laelia sincorana// Schlechter (1917)
//Sophronitis sincorana// Van den Berg & M.W.Chase (2000)
//Hadrolaelia sincorana// Chiron & V.P.Castro (2002)
__Heterotypic Synonyms:__
//Cattleya grosvenorii// Ruschi (1969)

!Rekommenderad läsning
[[Cattleya Source|http://cattleya.wikidot.com/laelia-sincorana]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/laeliasincorana.htm]]





































































































































































































































































































!Allmänt och utbredning
Denna miniatyrart är endemisk för centrala Colombias svala och fuktiga molnskogar. Den har bara hittat en gång och då i Colombia 1888, men det finns inga uppgifter finns om var man hittade arten. Alla plantor som finns nu härstammar från den enda plantan.
Artepitetet anspelar på läppens fiolformade utseende.

!Utseende
Den saknar pseudobulber utan från en underjordisk horisontell stam kommer de ensamma, avlångt kilformade, läderartade, undertill purpurfärgade bladen på en lång stjälk, omslutet av fem till tio vita, svartprickiga, pergamentstunna täckblad. Under senvåren och tidig sommar kommer de två cm stora blommorna på en upptill nio cm lång blomstängel längs ovansidan av bladet. Blomstängeln producerar ett flertal blommor som öppnas successivt en i taget under många veckor.

!Skötsel
Den är ovanlig i odling men utgör egentligen inga större problem. Den föredrar svala till intermediära förhållanden med halvskugga och hög luftfuktighet.
Plantera växten i en fin barkmix med perlit eller vitmossa. Vatten regelbundet och hålla komposten fuktig.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/respandurata.htm]]


!Allmänt och utbredning
Denna minatyrart är endemisk för de fuktiga bergsskogarna på vulkanen [[Pichincha|http://sv.wikipedia.org/wiki/Pichincha]], väster om Ecuadors huvudstad Quito, där den lokalt är mycket vanligt förekommande mellan 1060 och 1800 meters höjd.
Den är döpt efter sin upptäckare, den amerikanske botanisten Calaway H. Dodson.

!Utseende
Den saknar pseudobulber utan de ovala bladen kommer på en lång stjälk från en underjordisk horisontell stam. De små blommorna, bara cirka en cm stora, kommer en och en successivt under flera veckor på en tunn, tre cm lång stängel på ovansidan av bladskivan. De röda, orange och mörkbruna blommorna kan komma när som helst under året.

!Skötsel
Den behöver en skuggig eller ljus halvskuggig plats med hög luftfuktighet och svala växtförhållanden. Den kan odlas i en mix av barkkompost, perlite och en hög andel sphagnum, men många föredrar att odla dem monterade om luftfuktigheten är tillräckligt hög. Det ger plantan bättre luftcirkulation och minskar risken för röta. Med en sphagnumrik kompost i plastkruka håller komposten fukten i upptill en vecka, beroende på hur varmt det är. Risken för övervattning ökar dock när det är varmt.
Med en kompost som hålls fuktig hela tiden är det viktigt att plantera om åtminstone en gång om året. Till och med monterade plantor bör planteras om med jämna mellanrum.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/restdodsonii.htm]]
[[The Orchid Species Preservation Foundation of Alberta (OSPF)|http://www.orchidspecies.ca/directory/restrepia/restrepia-dodsonii/details/]]



!Allmänt och utbredning
Den återfinns terrestriskt i djupa lager lövkompost på vulkaniskt berg djup inne i skuggiga, fuktiga skogar på öarna New Guinea, Salomonöarna, Guadacanal och Bougainville från 820 till 1800 meters höjd. Den är mycket sällsynt med en begränsad utbredning och har minskat med 90% de senaste decennierna. Totalt beräknas det finnas mindre än 200 vuxna individer med mindre än 50 individer per population. Tyvärr är den fortfarande ovanlig i odling.
Arten är uppkallad efter Clayton Wentworth, som återinsamlade arten och införde några plantor i odling några år efter den upptäcktes av Kip McKillop och G. Hermon Slade på ön  Bougainville. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Blepharopetalum. Kromosomtalet är 2n=40.

!Utseende
Den bildar en rosett med fyra till sex långsmala blad, tolv till 25 cm långa och tre till fem cm breda, mönstrade i mörkt och ljust grönt. Under senvintern och tidig vår kommer en upptill 35 cm lång blomstängel som bär en ensam, åtta cm stor blomma. Den dorsala sepalen är ljusgul med grönt mot mitten och med gröna nerver. Petalerna är gröna mot basen och purpurfärgade mot spetsarna. Läppen är gulgrön med nyanser i rödbrunt och staminoiden är grön.

!Skötsel
I dess naturliga utbredningsområde är den ständigt våt av sporadiska regn under sommaren och kraftiga regn under vintern som är den våtaste årstiden, från december till april.
Odla den på en skuggig växtplats med intermediär temperatur och hög luftfuktighet. Plantera i en väldränerad och öppen blandning av medelgrov barkkompost, perlit och sphagnum. Vattna regelbundet ungefär var tredje till var fjärde dag. Håll komposten fuktig men inte blöt, låt den inte torka ut. För att inducera blomningen behövs en kort period med minskad vattning. Plantan är känslig för salt så skölj regelbundet igenom komposten med rent vatten.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphwentworthianum.htm]] 2015-09-07
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/wentworthianum/index.html]] 2015-09-07
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_wentworthianum]] 2015-09-07
[[e-Monocot|http://www.emonocot.org/taxon/urn:kew.org:wcs:taxon:147327]] 2015-09-07






















































































































!Allmänt och utbredning
Det är en terrestrisk art som växer som spridda plantor eller små kolonier i sprickor på utsatta, nästan vertikala, kalkstensklippor i provinsen Cao Bang i norra Vietnam mellan 600 och 1000 meters höjd över havet.
Namnet kommer från det latinska ''coccineus'' som betyder "scharlakansröd" och kommer från den röda mittfläcken på den dorsala petalen. Den anses fortfarande av vissa taxonomer som en variant av //[[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]]//, //Paph. barbigerum// var. //coccineum//, men som bland annat har en mindre blomma. Taxonomiskt tillhör den undersläktet Paphiopedilum sektionen Paphiopedilum.

!Utseende
Det är en liten art med fyra till sex ljusgröna, långsmala blad som blir mellan åtta och 14 cm långa och drygt en cm breda. Under hösten kommer en upptill 18 cm lång blomstängel som bär en ensam, sex till tio cm bred blomma. Blomman liknar mycket de hos //[[Paph. helenae|23c80e10-9b9f-47b5-ace1-f00fd2696ed5]]// och //[[Paph. barbigerum|dcba5cd4-4765-4699-91e3-699a837c86d3]]// men med en karaktäristisk röd fläck mitt på den dorsala sepalen. Petalerna är rödlila med ljusgröna, vågiga kanter och läppen purpurfärgad. Stamnoiden är klargul och nästan helt rund med två "tänder" på undersidan.

!Skötsel
Området där de växer utsätts för kraftig dimma på vintern och våren. På sommaren faller dagligen kraftiga regn. Odla dem i ljus skugga i intermediära temperaturer. Plantera i väldränerad mix av medelgrov barkkompost och perlit med en liten tillsats av kalk. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning behövs en kort period med minskad vattning och lägre temperaturer på vintern efter blomningen.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum barbigerum// var. //coccineum// Cavestro (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphcoccineum.htm]] 2015-04-23
[[Slipperorchid.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/coccineum/index.html]] 2015-04-23
[[The Beauty of Orchids & Flowers|http://www.orchids-flowers.com/orchids/lady-slipper-orchid-paphiopedilum-coccineum/]] 2015-04-23
[[Orchid Japan|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu21.html]] 2015-04-23














!Allmänt och utbredning
Det är en liten epifystisk art som växer endemiskt i de svala, fuktiga molnskogarna på berget Nudo de Sabanilla i provinsen Zamora-Chinchipe, sydöstra Ecuador, mellan 2400 och 2700 meters höjd.
Den är döpt efter Dennis D´Allesandro från Vilcabamba, Ecuador, som upptäckte arten så sent som 1985 och blommade den i odling 1988.

!Utseende
Den saknar pseudobulber, utan de långa, långsmalt ovala bladen kommer ett och ett, tätt tillsammans från en underjordisk stam. Bladen är vid basen omslutna av tunna, pappersliknande täckblad. Från basen av bladen kommer under våren den sju till nio cm lång blomstängelarna som var och en bär några få blommor. Blommorna är två cm stora, färgade i ljust brunt med tio cm långa, mörka spetsar på sepalerna och en liten läpp med skarpa kanter.

!Skötsel
Håll plantan svalt i halvskugga. Odla den i en mix av fin barkkompost med perlite och sphagnum, eller i ren, levande sphagnum. Vattna regelbundet och håll komposten fuktig.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dracdallesandroi.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dracula_dalessandroi]]
[[Dracula species|http://www.dracula-species.eu/Subgenus/parviflorae/drdalessandroi.html]]
































!Allmänt och utbredning
Släktet består av <$view field="count"/> arter och en naturhybrid som flyttats från cattleyasläktet på grund av fylogenetiska studier baserade på DNA sekvensering. De växer i fuktiga skogar i Centralamerika och norra Sydamerika.
En av de mer kända är //[[Gur. skinneri|8d5fdb45-bad1-4c90-bf00-d34575373022]]//, Costa Ricas nationalblomma, som tidigare hette //Cattleya skinneri//.
Namnet kommer av det lokala namnet för just //[[Gur. skinneri|8d5fdb45-bad1-4c90-bf00-d34575373022]]//, ''Guaria Morada''. Ordet ''guaria'' betyder just "orkidé" och ändelsen ''anthe'' betyder "vacker blomma".

!Utseende
Släktet skiljs ut från cattleyasläktet för sina blommor, fyra polliner och sina små nektargömmor.

!Skötsel
I stort sett odlas de som cattleyor, med mycket värme och hög luftfuktighet.
Arter med torkanpassningar som tjocka, hårda blad måste få torka ut mellan vattningarna.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[Gur. skinneri|8d5fdb45-bad1-4c90-bf00-d34575373022]]// Dressler & W.E.Higgins (2003)

''Uttal''
gwore-ee-AN-thee

''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Guarianthe]]



















!Allmänt och utbredning
//Pls. misera// [PLAT-ee-stee-lee MIS-er-uh] växer epifytiskt i Colombia, Peru och Ecuadors svala regnskogar mellan 1800 och 2900 meters höjd.
Artepitetet kommer från latinets ''miser'' som betyder "ömklig" efter blommans ringa storlek i förhållande till andra arter inom undertribus Pleurothallidinae.

!Utseende
Det är en miniatyrart utan pseudobulber utan den bildar kompakta kuddar med många bladstjälkarna tätt tillsammans, direkt från ett underjordiskt rhizom. Bladstjälken är omsluten av två till tre tunna, pappersliknande täckblad. De mörkgröna, avlångt ovala bladen blir sällan längre än tio cm och blomstänglarna som kan komma när som helst under året höjer sig nästan dubbelt så högt över bladen. Stängeln kommer från bladbasen och förlängs hela tiden den bildar successivt nya blommor. De stjärnformade, gnistrande röda blommor blir inte större än fyra mm och är nästan halvt genomskinliga.

!Skötsel
Den föredrar en fuktig, halvskuggig växtplats med svala eller intermediära temperaturer. Vintertid kan temperaturen få sjunka ända ner till fem grader. Odlas monterad eller i krukor med fin barkkompost och perlit eller vitmossa. Vattna regelbundet och håll den ständigt fuktig, låt den inte torka ut. Den behöver nästan dagliga duschar för att hålla luftfuktigheten hög.

!Synonymer
__Homotypic Synonyms:__
//Pleurothallis misera// Lindley (1859)
//Humboltia misera// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/platmisera.htm]] 2015-10-07
[[Orchids Wiki|http://orchids.wikia.com/wiki/Platystele_misera]] 2015-10-07

















































!Allmänt och utbredning
En miniatyr endemisk för molnskogarna i regionen Nariño i södra Colombia där den växer runt 1650 meters höjd över havet.
Denna art är mycket nära släkt med den allmänt spridda och mycket variabla arten //[[Rstp. brachypus|8679f0a5-c881-40ac-8061-08cdaa5084aa]]//. Tidigare ansågs //Rstp. purpurea// vara en ovanlig form av //[[Rstp. brachypus|8679f0a5-c881-40ac-8061-08cdaa5084aa]]// med begränsad förekomst i den sydligaste regionen av Colombia, helt inom utbredningsområdet för //[[Rstp. brachypus|8679f0a5-c881-40ac-8061-08cdaa5084aa]]//. //Rstp. purpurea// är dock mindre med ett mer upprätt växtsätt med i stort sett ovala, runda, mörklila blad. Blomstjälkarna är ungefär hälften så lång som bladet, medan de hos //[[Rstp. brachypus|8679f0a5-c881-40ac-8061-08cdaa5084aa]]// är lika lång, eller till och med längre än bladet. Blommorna är mindre än hos //[[Rstp. brachypus|8679f0a5-c881-40ac-8061-08cdaa5084aa]]// och synsepal vit i stället för gul och randig med mycket bredare, ljusare purpurfärgade ränder. 
Namnet kommer från latinets ''purpurea'' som naturligtvis betyder "purpur" och anspelar på de mörka purpurfärgade ränderna på synsepalen.

!Utseende
Den är en liten epifytiska art som sällan blir så stor som 20 cm och som saknar pseudobulber utan de tre till åtta cm långa bladstjälkarna kommer direkt från en underjordisk stam med tunna, hårlika rötter. Bladskaftet är vid basen omsluten av fem till sju vita, torra täckblad och bär i toppen ett ensamt, avlångt ovalt, mörkgrönt blad med färgtoner i purpur. Bladen blir upptill fem cm långt och drygt tre cm brett. Från bladfästet på ovansidan av bladskivan kommer en tre till fyra cm lång blomstängeln. Stängeln bär under några dagar på vår och sommar en ensam, två cm stor, vit blomma med ränder i klart lysande purpur, läppen är orangebrun med tre purpurfärgade ränder. 

!Skötsel
Den växer fuktigt med svala nätter men klarar varmare temperaturer dagtid. Ge den halvskugga eller ljus skugga, mindre än 10000 lux. Plantera om den var eller vartannat år, förslagsvis i en mix av fin barkkompost med perlite och hackad sphagnum eller i ren sphagnum. Vattna regelbundet och håll komposten fuktig. Den växer snabbt men bildar inte så lätt keikis.

!Synonymer
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_purpurea]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/respurpurea.htm]]
[[Epidendra|http://www.epidendra.org/taxones/Restrepia/Restrepia%20purpurea/restrepia%20purpurea.pdf]]

!Allmänt och utbredning
Släktet innehåller endast <$view field="count"/> enda art, som växer från Mexico till Centralamerika och Karibien.
Släktet skapades när släktet //[[Encyclia|bd328114-eef7-4bb0-988a-95e172e6ffb0]]// delades i två olika släkten, //Dinema// och //[[Encyclia|bd328114-eef7-4bb0-988a-95e172e6ffb0]]//.

!Utseende
Arten är småväxt, med ovala pseudobulber stora som en böna, växande väl avgränsade på ett smalt rhizom. De ett till tre elliptiskt avsmalnade, skinande gröna bladen kommer från toppen av pseudobulben.
Blomman är stor, färgade i gulbrunt med mörkare markeringar mot basen, med en stor rundad läpp.

!Skötsel
De vill ha en sval till varm omgivning med lätt skugga. Odlas med fördel monterad på bark eller kork för att sörja för dess krypande natur. De vill ha en jämn vattning och svag gödning ofta för att inte bränna de tunna rötterna. En fjärdedel till halva den rekommenderade dosen varje vecka under tillväxten. De bör samtidigt hållas fuktiga, med en minskning av vattenfrekvenser under hösten och vintern.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[Din. polybulbon|fada609a-e039-4d08-bebc-45239107db90]]// Lindley (1831)

''Uttal''
die-NEE-ma

''Synonymer''
N/A

!Rekommenderad läsning
[[Orchid Societies Council of Victoria Inc.|http://www.oscov.asn.au/articles2/encyclia.htm]]































































































































































































































!Allmänt och utbredning
Arten växer från Himalaya, Kina, Thailand och Burma mellan 1200 till 2000 meter över havet. Det är en liten till stor, kall till varmväxande epifyt, litofyt eller terrestrisk art som återfinns i fuktiga, mossig blandskog där de får mycket ljus och luftväxling.

!Utseende
De har rundat klubbformade, gulaktiga stammar som kan bli över en halv meter långa. De bär fem till sju mörkgröna blad. Under den tidiga våren kommer en tre dm lång stängel från toppen av en stam, översållad med upptill 50 doftande blommor som är fem cm tvärs över. Sepalerna och petalerna är rosa när de börjar öppnas, men när de är helt utslagna blir de helt vita. Läppen är gyllengul.
Den underbara doften kan lätt fylla ett helt rum.

!Skötsel
De föredrar en lätt skuggad placering med intermediära temperaturer. De behöver mer ljus under vintern för att initiera blomningen. Under vintern behöver de en minsta temperatur på tio grader.
Vattna försiktigt genom vintermånaderna, låt den få en nästan helt torr period utan gödning. Efter blomningen kommer den nya tillväxten. Vattningen bör hållas till ett minimum till dess de har utvecklat sina egna rötter. Om den för mycket vatten för tidigt kommer nytillväxten att ruttna. När rotsystemet väl är utvecklat kan vattningen och gödningen ökas för att under sommaren ges en generös giva av båda delarna. 
De växer bäst monterade på trä eller eventuellt i en kruka som är tillräckligt tung för att balansera de stor, långa stammarna.

!Synonymer
__Homotypic Synonyms:__
//Dendrobium densiflorum// var. //alboluteum// Hook.f. (1869)
//Callista thyrsiflora// M.A.Clem. (2003)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denthrysiflorum.htm]]
[[Species Specific|http://www.species-specific.com/potm.html]]




























































!Allmänt och utbredning
De växer naturligt i molnskogarna i Thailand och Vietnamns högländer. Där lever de som kall- till svalväxande terrestra orkidér över 2000 meters höjd över havet.

!Utseende
En anmärkningsvärd art som får en kort och tjock, vårtig, grön pseudobulb. //Pln. maculata//, tillsammans med //[[Pln. praecox|7e9f11d6-2e9a-4137-a589-e44254121a66]]// och //[[Pln. saxicola|d8cb7fe3-6ba4-4008-9180-f4523b70909c]]//, är höstblommande. De börjar blomma under september och oktober.
//Pln. maculata// är vitblommande med en starkt strimmig läpp i purpur och gult.

!Skötsel
Denna art har en kortare viloperiod än många andra pleionearter, och behöver högre temperaturer under denna tid. Runt tio grader kan vara lagom.
De behöver en öppen, luftig kompost, som ren vitmossa, i korg eller kruka. Bladen och rötterna börjar utvecklas tidigt, ofta innan året är slut. Trots denna nya tillväxt får de inte få för mycket vatten, en vattendusch då och då räcker. Först när rötterna är ordentligt utvecklade börjar man vattna ordentligt.
//Pln. maculata// föredrar en ganska varm sommar med hög luftfuktighet.

!Synonymer
__Homotypic Synonyms:__
//Coelogyne maculata// Lindley (1830)
__Heterotypic Synonyms:__
//Gomphostylis candida// Wallich (1830)
//Pleione diphylla// Lindley & Paxton (1851)
//Coelogyne diphylla// Lindley (1854)
//Coelogyne arthuriana// Rchb.f. (1881)
//Coelogyne maculata// var. //virginea// Rchb.f. (1887)
//Pleione maculata// var. //arthuriana// Rolfe (1903)
//Pleione maculata// var. //virginea// Karth. (1989)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/plemaculata.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=maculata&grupp=pleione&avdelning=latinsktNamn&huvudavdelning=rad]]

















!Allmänt och utbredning
//Rstp. flosculata// är en art som förekommer i molnskogar från Valle de Cauca, Colombia, till nordvästra Ecuador mellan 1200 och 1800 meters höjd.
Artepitetet kan närmast översättas med "den småblommiga restrepian", passande eftersom den trots sin relativt stora storlek har bland de minsta blommorna inom släktet.

!Utseende
Det är en liten planta som sällan blir mer än 20 cm hög och som saknar pseudobulber utan den långa, smala bladstängeln kommer direkt från ett underjordiskt skott. Bladstängeln är omsluten av sex till åtta tunna, vita, brunprickiga täckblad. Under höst och vinter kommer en knappt tre cm lång, upprätt blomstängel från undersidan av bladskivan. Blomman blir lite över en cm bred, klargul med tunna, röda ränder.

!Skötsel
Håll plantan skuggigt och i svala eller intermediära temperaturer. Plantera den i en mix av fin barkkompost med perlit eller sphagnum. Vattna regelbundet och håll komposten jämnt fuktig.

!Synonymer
__Heterotypic Synonyms:__
//Restrepia flosculata// var. //pallens// H.Mohr & Herzum (1988)
//Restrepia flosculata// var. //picta// H.Mohr & Herzum (1993)
//Restrepia flosculata// subsp. //picta// H.Mohr (1996)
//Restrepia flosculata// f. //picta// O.Gruss & M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/resflosculata.htm]]
[[Orchids in Bloom|http://orchidsinbloom-ron.blogspot.se/2013/08/restrepia-flosculata.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_flosculata]]
[[The Pleurothallid Alliance|http://pleurothallids.com/index.php?option=com_content&view=article&id=891&Itemid=58]]










!Allmänt och utbredning
Arten är endast känd från Mexiko, med två växtplatser i delstaten Chiapas, nära gränsen mot Guatemala. Det är därför mycket troligt att denna art är också finns i liknande habitat i norra Guatemala. Den återfinns epifytiskt i de ständigt fuktiga regnskogarna mellan 1400 till 1700 meters höjd där den klamrar sig fast på barken av träd en till fyra m över marken.
Det är en ovanlig art som är nära besläktad med och länge ansågs som en synonym till //[[Phrag. caudatum|f8ba86f2-f427-4519-b797-9b85b6915e40]]// utom i det avseendet att den helt saknar staminoid vilket är en helt stabil egenskap hos plantorna i Chiapas. Det verkar vara ett resultat av naturligt urval med ett viktigt inflytande på pollinering mekanismen. Någon gång under knopputvecklingen eller blomningen kommer pollinierna i kontakt med märkets yta, vilket gör att blommar självpollinera.
Avsaknaden av staminoid har även gett arten dess namn. Taxonomiskt tillhör den sektionen Phragmipedium. Kromosomtalet är 2n=28.

!Utseende
Det är en medelstor art som bildar en rosett med drygt 40 cm långa och fyra cm breda blad. Under senvåren och försommaren kommer en upptill 50 cm lång blomstängel som bär en till fyra samtidigt öppna, åtta till tio cm stora blommor. Blommorna är ljusgula med toner i rödbrunt. Petalerna är vita mot basen och rödbruna ut mot spetsarna, vridna och kan bli mer än 40 cm långa.

!Skötsel
Den behöver ha en ständigt fuktig kompost, de får inte torka ut. Sörj för god luftcirkulation och hög luftfuktighet. Ge den en ljus växtplats utan direkt sol, 24000 till 30000 lux, och en intermediär eller varm temperatur. Odla i små krukor med en fukthållande mix av fin eller medelgrov barkkompost och perlite, eller i ren sphagnum. Vissa odlare har haft framgång med ett lager av tre till fem cm sphagnum i botten av krukan och resten fin bark. Rötterna söker sig till den fuktiga mossan utan att komposten blir genomblöt. Vattna med vatten av bra kvalité två, tre gånger i veckan under sommaren och en gång i veckan under vintern, ge svag gödning varannan vattning eller mer sällan, de är känsliga för uppbyggnad av salter i komposten. 

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum exstaminodium// V.A.Albert & Börge Pett. (1994)
//Phragmipedium warscewiczii// subsp. //exstaminodium// Christenson (2006)
//Phragmipedium humboldtii// subsp. //exstaminodium// J.T.Atwood & Dressler (2011)
__Heterotypic Synonyms:__
//Phragmipedium triandrum// Archila (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragexstaminodianum.htm]] 2015-10-02
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=102]] 2015-10-02
[[eMonocot|http://cypripedioideae.e-monocot.org/taxonomy/term/834]] 2015-10-02





















!Allmänt och utbredning
Det är ett terrestriskt släkte med <$view field="count"/> mykoheterotrofa arter som förekommer i skogiga bergsområden i Himalaya, Kina, Japan, Korea, Sydostasien och Nya Guinea på höjder mellan 300 och 1500 m över havet. Inget annat mykoheterotroft orkidésläkten har ett så stort antal arter fördelade över så många olika klimatförhållanden.
Det vetenskapliga namnet härstammar från det grekiska ordet ''lekane'' som betyder "bassängen" och refererar till den lilla skål som bildas mellan sepalerna och könspelaren, och ''orchis'' för "orkidé".

!Utseende
Det är klorofyll-lösa plantor som saknar blad eller vars blad reducerats till små fjäll. De producerar många, långa, tjocka, horisontella rötter på ett kort rhizom som kan vara enkel eller grenad. De upprättstående, mörka, förgrenad eller ogrenad, stammarna är tunna och sköra. I toppen av stammarna kommer korta blomstänglar som bär få till mer än tio små blommor i brunt, lila, gult eller grönt, med en något ljusare läpp. Läppen är ungefär av samma längd som sepalerna och är täckt med tät, gult hår. De flesta arter av Orchidaceae som saknar gröna blad producera stam,
blommor och frön som vissna och dör på kort tid. Men även om blomningstiden är kort hos //Lecanorchis// står de vissnade växtdelarna kvar ovan jord en längre period, och fruktplantor med de runda frökapslarna kan lätt hittas i skogarna.

!Skötsel
Eftersom de är mykoheterotrofer är de mycket svåra att få att överleva i odling.
I sitt naturliga utbredningsområde växer de i tempererade lövskogar, i lövkomposten på skogens golv där det är som mörkast. Det är ingen uttalad torkperiod utan de har en jämn fuktighet hela året.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Lec. japonica|8a34b4af-d689-40bf-96b8-36d7853b8c14]]// Blume (1856)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=117802]] 2015-12-29
[[eMonocot|http://www.emonocot.org/taxon/urn:kew.org:wcs:taxon:109146]] 2015-12-29

;Masanari Okayama & Masahide Yamato & Takahiro Yagame & Koji Iwase, 2012
://Mycorrhizal diversity and specificity in //Lecanorchis// (Orchidaceae)//
:Mycorrhiza. 2012 Oct; 22(7):545-53. doi: 10.1007/s00572-012-0429-z
























































!Allmänt och utbredning
//Paph. primulinum// är en art som är hemmahörande på norra sidan av ön Sumatra, i humusen på kalkklippor mellan 400 och 1000 meters höjd över havet.
Den grön-och-vita formen var den som först upptäcktes, och den färgade formen namnas därför som //purpurascens//.
Till skillnad från de flesta andra paphar som har ett kromosomtal 2n=26, har //Paph. primulinum// 2n=32.

!Utseende
Det är en liten planta med långa, smala, rent gröna blad.
Den sju cm stora blomman är vanligen gul eller gulgrön. //Paph. primulinum// blommar länge och med flera blommor som slår ut succsessivt på varje stängel som kan bli upp till tre dm lång. Varje blomma kan stå en månad och under tiden hinner en annan slå ut för att ta dess plats. På så sätt kan en ensam stängel blomma under ett helt år, och en välväxt planta vara i konstant blom.

!Skötsel
Det är en intermediär till varmväxande planta, som föredrar mycket sol.
Odla plantan i låga, vida krukor som tillåter rotsystemet att breda ut sig ordentligt. Använd en vanlig, väldränerad paphkompost, som hålls fuktig snarare än våt.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum chamberlainianum// f. //primulinum// Fowlie (1973)
//Paphiopedilum victoria-regina// subsp. //primulinum// M.W.Wood (1976)
//Paphiopedilum liemianum// var. //primulinum// K.Karas. & K.Saito (1982)
//Paphiopedilum chamberlainianum// var. //primulinum// Braem (1988)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphprimulinum.htm]]
[[BurleighPark Orchids|http://www.speciesorchids.com/PaphiopedilumPrimulinum.html]]
[[OrchidsOnline|http://www.orchidsonline.com.au/interactive/node/2104]]
[[Jasons OrchidPage|http://homepages.nyu.edu/~jlc314/Paph.%20primulinum%20fma.%20purpurascens.html]] &
[[Jasons OrchidPage|http://homepages.nyu.edu/~jlc314/2003%20GNYOS/Paph.%20primulinum.html]] pic
[[Gore OrchidConservatory|http://www.goreorchidconservatory.com/GalleryStorage/paph-primulinum2.jpg]] pic

!Allmänt och utbredning
//Phrag klotzschianum// är en ovanlig art från sydöstra Venezuela, Guyana och norra Brasilien där den växer litofytiskt på sandstensklippor i eller nära rinnande vatten mellan 400 till 1400 meters höjd.
Richard Schomburgk fann den här arten 1847 vid Rue floden i dåvarande brittiska Guyana och H.G. Reichenbach beskrev den 1847 baserat på herbarium materialet. Senare under 1855 hittades fler plantor av Thurn i Roraima bergen vid gränsen till Venezuela och Guyana. Det var inte förrän 1886 innan den första plantan importerades till Europa av Sander.
Den är uppkallad efter Dr. Johann Klotzsch, intendent för Berlin Herbarium mellan 1833 och 1860. Artepitetet felstavades //klotzscheanum// av Reichenbach fil. i den ursprungliga beskrivningen, men rättades i hans senare publikationer. ICBN riktlinjer försöker korrigera för denna typ av fel och den korrekta stavningen är //klotzschianum//. Taxonomisk tillhör den sektionen Himantopetalum.

!Utseende
Det är en av släktets minsta arter som bildar en kompakt rosett av smala, styva, gräsliknande blad, 13 till 30 cm långa och knappt en cm breda. Den har utvecklat mycket styva rötter som nästan kan skjuta upp plantan ur en kruka för att övervinna motståndet hos den tätpackade kiselsanden där de växer. Under vintern kommer en upptill halvmetern lång blomstängel med två till fem blommor som öppnas successivt. Blommorna är stora i förhållande till plantans generella storlek. Sepaler och petaler är ljusgul, rosa eller lila med purpurfärgade nerver. Petalerna är decimeterlånga och vridna. Den gulaktiga läppen har en ganska unik form, som en framskjuten haka.
Plantor som växer under skuggiga förhållanden växer sig större och tenderar att ha längre blad. Blomningen hos dessa plantor är ganska glesa, med endast två eller tre blommor per blomställning. Färgen på blommorna är också mycket grönare än den hos de växter som växer på mer solexponerade platser. Det verkar som frökapslar bara bildas på de plantor i ljusare förhållanden. De plantor exponerade för mycket ljus när de är i knopp verkar vara mycket känsliga för angrepp av vivlar av av familjen //Curcolionideos//, som äter blomknopparna.
Ett annat intressant faktum är att det verkar som artens huvudsakliga sättet för spridning inte är med frön utan med delar av rhizomet. Eftersom plantorna nästan alltid växer längs kanterna av strömmande vatten, tenderar översvämningarna under regnsäsongen att bryta delar av jordstammar och ta dem med nedströms. På platser där strömmen är mindre stark kommer dessa delar spolas upp på stranden, där de etablerar sig för att bilda nya individer.

!Skötsel
Den vill ha mindre gödning än andra inom släktet och mer ljus. I naturen återfinns de längs rinnande vatten ofta utsatta för fullt solljus, upp till 120000 lux. De kan anpassa sig och växa i svagare ljus, ner till 15000 lux, men tillväxten kommer vara klen och blomningen kan utebli. För en vuxen planta kan 20000 till 30000 lux vara lagom. Den växer i absolut rent vatten med ett pH av 6,0 till 6,6 med mycket lite näring. I naturen är det inte ovanligt med översvämningar i detta område under kraftiga regn och plantorna kan stå helt under vatten under långa perioder. Den kan med fördel odlas stående på ett fat med vatten. Låt vattnet bara precis torka ur på fatet, spola plantan uppifrån och fyll på fatet. Låt aldrig plantan torka ut helt. Använd helst regnvatten eller R/O-vatten.
Odla i en väldränerad mix mer medelgrov barkkompost. Var försiktig med att inte bryta dess styva rötter under omplanteringen.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium klotzschianum// Rchb.f. (1850)
//Selenipedium klotzschianum// Rchb.f. (1854)
//Paphiopedilum klotzschianum// Stein (1892)
__Heterotypic Synonyms:__
//Cypripedium schomburgkianum// Klotzsch (1876)
//Selenipedium schomburgkianum// Desbois (1888)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragklotscheanum.htm]] 2015-10-20
[[Slipperorchids.info|http://www.slipperorchids.info/phragdatasheets/klotzschianum/index.html]] 2015-10-20
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=159]] 2015-10-20


















































































!Allmänt och utbredning
Den växer i full sol på de fuktiga, öppna grässlätterna på den indonesiska ön Sulawesi mellan 1100 och 1200 meters höjd.
Namnet har den fått efter den amerikanske orkidéentusiasten Richard Topper. den liknar //[[Paph. lowii|2e405981-6bdd-44eb-a79a-b965d76ccdaa]]//, som den ansågs en variant av, men är mindre och kompaktare, med en mycket karaktäristisk V-formad kil i läppens övre kant, kortare och betydligt mer nedhängande petaler. Taxonomiskt tillhör den undersläkte Polyantha sektion Polyantha. Kromosomtalet är 2=26.

!Utseende
Den bildar fem avlånga blad med en mörkgrön ovansida och ljusgrön undersida. Under höst, vintern och vår kan en brun, tunt hårbeklädd blomstängel uppenbara sig. Blomstängeln kan bli upptill en halvmeter lång och bära en till åtta stycken fyra cm stora blommor, liknande de hos //[[Paph. lowii|2e405981-6bdd-44eb-a79a-b965d76ccdaa]]//.

!Skötsel
I sitt naturliga habitat får den mycket sol så upptill 20000 lux kan den klara utan problem. Sommaren är våt och temperaturen varierar inte så mycket från 24 grader året runt. Låt inte nattemperaturen gå under 15 grader vintertid.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum lowii// var. //richardianum// O.Gruss (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphrichardianum.htm]] 2015-08-17
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/lowiivarrichardianum/index.html]] 2015-08-17
[[Pick An Orchid|http://pickanorchid.com/paphiopedilum-richardianum/]] 2015-08-17






















!Allmänt och utbredning
Släktets <$view field="count"/> accepterade arter är utbredda i tropiska Afrika och Madagaskar, även om vissa arter är mycket begränsade i sin distribution, och många arter är inte vanligt även om lämpliga habitat finns. 27 arter finns beskrivna från den afrikanska kontinenten, alla andra arter växer på Madagaskar och öar i Stilla havet och Indiska oceanen. 21 arter är registrerade från Madagaskar, varav 5 också återfinns på ögruppen Komorerna och en från Réunion. En art har registrerats från flera platser längs kusten i östra Afrika och på Sri Lanka. Med ett fåtal varmväxande undantag som //[[Aer. mystacidii|c913f8c8-98a2-448f-8645-ea9edb024725]]// växer de i intermediära temperaturer på högre altituder.
Trots att de är relativt lättodlade är de fortfarande ganska ovanliga i orkidésamlingar, och bara runt ett dussin av arterna förekommer i allmän odling.
Fram till 1865 hade många av arterna beskrivits under släktnamnet //[[Angraecum|50735376-a610-4ddb-be80-1597af6e57b4]]//. HG Reichenbach föreslog ett nytt släkte //Aerangis// på grundval av blommorna karaktärer hos bland annat könspelarna och pollinerna. Nya studier har visat att //Aerangis// har ett kromosomtal på 2n = 50 medan //[[Angraecum|50735376-a610-4ddb-be80-1597af6e57b4]]// har 2n = 38.
Namnet, som anspelar på den nektarfyllda sporren vid basen av läppen som är karaktäristisk för släktet, kommer från de grekiska orden ''aer'' som betyder "luft", och ''angos'' som betyder "kärl". Det är typsläktet för undertribus Aerangidinae.

!Utseende
De är små eller medelstora, epifytiska eller litofytiska, monopodiala vandaliknande arter som saknar pseudobulber utan bildar en ensam, ogrenad stjälk som bär sex till tio köttiga blad i två rader längs stammen och kraftiga rötter som kommer från bladfästena längs nedre delen av stammen.
De får stora vaxartade, stjärnformade blommor som vanligen är vita, krämfärgade eller gula. Blommorna har en lång, nektarfylld sporre som oftast är längre än resten av blomman, mer än tio cm lång. Läppen är platt och liknar sepaler och petaler som är långa och smala, och ofta tillbakavridna. Blommorna fortsätter att växa några dagar efter att den slagit ut och kan i vissa fall och under bra växtbetingelser dubbla sin storlek. Nattetid avger de flesta arter en angenäm doft för att locka till sig nattaktiva svärmare som pollinatörer.

!Skötsel
De är inte svåra att odla men är känsliga för plötsliga förändringar. De föredrar en halvskuggig växtmiljö med hög luftfuktighet och intermediär temperatur. Gärna ner till mellan 13 till 18 grader under nätterna till uppåt 30 grader dagtid, de frodas med en stor temperatursmässig dygnsvariation. Gärna en sommarvistelse utomhus. Arter med tjocka blad, som //[[Aergs. modesta|b55104c5-21ca-45a3-a47a-53b0ae79890c]]// och //[[Aergs. ellisii|fba5459f-4d9a-43b7-9319-581b49e0eb8f]]// behöver mer ljus än de med tunna.
Många av arterna trivs bäst monterade men i en luftig kompost med grov bark fungera krukor lika bra om de kan planteras om årligen så inte komposten blir för kompakt. Under tillväxten behöver de generöst med vatten av bra kvalité men bara svag gödning. De bör inte torka upp för mycket men de vill inte heller stå ständigt blöta och de är känsliga för uppbyggnad av salter i komposten. Monterade plantor kan vattnas dagligen. De flesta arterna gynnas av en period med mindre vatten under den svalare vintern, men får inte torka ut för mycket då de lätt tappar bladen. För ofta vattendushar eller med för kallt vatten kan ha samma resultat. Arter med grova rötter som //[[Aer. kotschyana|2dbc19c5-887c-4af2-9252-a9deacc12e5c]]// och //[[Aer. verdickii|3a8e7b48-e59c-4f75-887c-eb6c76463a16]]// behöver torka upp helt under en kort period på vintern.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Vandeae
''Undertribus'': Aerangidinae

''Typart''
//Aergs. flabellifolia// Rchb. f. (1865) synonym till //[[Aergs. brachycarpa|246d9ad4-fd7c-4797-9cb7-252783a42675]]// T.Durand & Schinz (1894)

''Uttal''
ah-er-AN-gis

''Synonymer''
__Heterotypic Synonyms:__
//Radinocion// Ridl. (1887)
//Barombia// Schltr. (1914)
//Barangis// auct. (1982)
//Microterangis// Senghas (1985)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Aerangis]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/aerangis.htm]]
[[Cal-Orchid|http://www.calorchid.com/product-test/]]
[[African Orchids|http://www.africanorchids.dk/higher-epidendroideae/tribe-vandeae/subtribe-aerangidinae-from-a-m/aerangis]]
[[Ionopsis|http://www.ionopsis.com/aerangis.html]]
[[Australian Orchid Council Inc.|http://www.orchidsaustralia.com/article_%20Aerangis_luteo_alba.htm]]




























!Allmänt och utbredning
//Phreatia// är ett släkte bestående av <$view field="count"/> epifytiska arter företrädesvis på Papua och New Guinea, men också utspridda från Indien, sydvästra Asien, Indonesien, Australien och öarna i Stilla havet.

!Utseende
Om de har pseudobulber bär de en till tre blad från toppen. Om de istället har en tjock välutvecklade stam som tjänar som pseudobulb har de istället upptill tolv blad arrangerade i två rader eller solfjädersformigt.
Blomstängeln kommer från basen av bulben eller lateralt från stammen. De har en klasliknande blomställning med mängder av mycket små, ljust gröna till vita blommor. De är ofta självpollinerande. Petalerna är oftast mindre än sepalerna, läppen är vanligen fäst vid basen med könspelaren som bär åtta polliner i två grupper med fyra i varje grupp.

!Skötsel
Som med alla stora släkten med utspridda arter, är det svårt att ge några generella odlingsråd.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Podochilaeae
''Undertribus'': Thelasiinae

''Typart''
//[[Phr. elegans|98000f69-c4a8-45d1-9f84-f7019a76c010]]// Lindley (1830)

''Uttal''
free-AT-ia

''Synonymer''
__Heterotypic Synonyms:__
//Plexaure// Endl. (1833)
//Rhipidorchis// D.L.Jones & M.A.Clem. (2004)

!Rekommenderad läsning
[[Flora China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=125138]] Vol. 25 Page 8, 16, ''366''










''Etymology:'' 
From the Greek chloros, green, in reference to the greenish colour of the flowers of the type species.




!Allmänt och utbredning
Denna lilla epifyt har sitt ursprung i skogarna i Colombia, Ecuador, Peru och Brazilien mellan 500 till 1800 meters höjd. Den växer företrädesvis på tunna grenar och är lokalt vanligt förekommande, bland annat i kaffeplantager.

!Utseende
De växer fler plantor tätt tillsammans som bildar bildar en klump. Den bildar smala, avlångt ovala, från sidan tillplattade pseudobulber, omslutna av flera täckblad och i toppen av bulben bär den ett ensamt, lancettlikt, mörkgrönt blad som blir 15 cm långt. Under våren bär den uppåt 18 cm långa, hängande blomstängeln en kaskad av citrusdoftande, runt fyra cm stora blommor. Blommorna är klart vita med en gyllengul fläck på läppen.

!Skötsel
Den behöver en varm växtplats med så gott som full sol, bara skuggad för den allra starkaste middagssolen. Odlade i korgar eller monterade på stora stycken trädormbunke bildar de lätt praktfulla plantor med flera samtidiga blomstänglar. I korg föredrar de en mix av fin barkkompost med tillsats av sphagnum och perlite. Eftersom den i sitt naturliga habitat växer på tunna grenar där den utsätts för daglig dimma men samtidigt snabbt torkar upp igen, är det den miljön man måste försöka efterlikna. Vattna och göd ordentligt under tillväxperioden men låt den torka upp mellan vattningarna, vattna mindre under vintern.
Den kan vara känslig för [[Cymbidium mosaik virus|http://en.wikipedia.org/wiki/Cymbidium_mosaic_virus]] (CymMV).

!Synonymer
__Homotypic Synonyms:__
// Burlingtonia venusta// Lindley (1837)
__Heterotypic Synonyms:__
//Burlingtonia fragrans// Lindley (1837)
//Rodriguezia fragrans// Rchb.f. (1852)
//Burlingtonia knowlesii// B.S.Williams (1894)
//Rodriguezia flavida// Garay & Dunst. (1976)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/rodrvenusta.htm]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/Rodriguezia_venusta.html]]
[[Botanica Ltd.|http://www.botanicaltd.com/images/species/species%20photo%2Bdescription%20pages/rodriguezia-venusta.htm]]
[[Wikimedia|http://upload.wikimedia.org/wikipedia/commons/3/3e/Rodriguezia_venusta.jpg]] teckning




















!Allmänt och utbredning
Det är en svalväxande epifyt som påträffas i Costa Rica, Panama och Colombia mellan 1300 och 1800 meters höjd. Det är en relativt nyupptäckt art som beskrevs så sent som 1996.

!Utseende
Den är liten till storlek, hela plantan blir inte större än 15 cm varav bladen blir mer än tio cm. De hjärtformade bladen kommer på en kort, upprätt stjälk. På ovansidan av bladet där bladet och stjälken sammanfogas kommer under vintern blomstängeln med en upptill tre cm stor blomma.

!Skötsel
Håll plantan fuktig hela tiden och ge den en hög luftfuktighet. Den behöver inte mycket ljus utan klarar sig i en skuggig placering. Dagtid kan vintertemperaturen kan ligga mellan tolv och 15 grader, och under sommaren mellan 16 och 25 grader. Om det blir väldigt varmt behöver luftfuktigheten höjas motsvarande, speciellt under morgontimmarna och kvällen.
Odlas med fördel monterade, men det går bra även i krukor med en porös kompostmix med mycket sphagnum.

!Synonymer
__Homotypic Synonyms:__
//Acronia ascera// Luer (2005)
//Zosterophyllanthos ascera// Szlach. & Kulak (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurascera.htm]]
[[Röllke Orchideen|http://www.roellke-orchideen.de/en/zum-shop/sonstige-orchideen/pleurothallis/pleurothallis-ascera.php]]































































































































































''Etymology:'' 
Named after Gustav Mann (1836-1916), Royal Botanic Gardens, Kew, gardener and plant collector on the Niger Expedition in West Africa from 1859 to 1862 and in India for the Indian Forest Service (1863-91).





















































































































































































































!Allmänt och utbredning
Släktet //Stelis// är en mycket stor grupp av orkidéer, med <$view field="count"/> arter sprida över hela den tropiska Nya Världen. Dessa huvudsakligen epifytiska, och sällan litofytiska, plantorna växer på trädstammar i fuktiga, mossiga  bergsskogar i tropiska Nord- och Centralamerika. 
Många av arterna har ljuskänsliga blommor som behöver direkt sol för att slår ut, och som stänger blommorna helt på natten.
Släktnamnet kommer från grekiskans ord för "mistel" som har sitt ursprung i det epifytiska växtsättet hos dessa arter. De är nära besläktade med de stora släktena //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]// och //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]//.
Stelissläktet var antagligen den första representanten för de amerikanska orkidéerna som fördes till Europa. Ett herbariumexemplar finns beskrivet i Tabernaemontanus örtbok redan 1591.

!Utseende
Ett enda blad utvecklas från små, läderaktiga utskott på ett krypande rhizom.
Många arter har långa, täta blomklasar med små eller minimala blommor i olika nyanser av vit. Andra färger förekommer bara undantagsvis. Blommorna är ljuskänsliga och öppnar sig endast i solljus. En del stänger sina blommor helt under natten.
Rent vegetativt är arterna mycket olika, men blommorna har ett enkelt grundutförande och är mycket lika genom hela släktet. De tre symetriskt rundade sepalerna bildar generellt en triangel. Centralt placerad i triangeln är en liten struktur som är uppbyggd av könspelaren, små petaler och en liten läpp. Vissa variationer kan förekomma, men detta är det vanligaste utseendet.

!Skötsel
Arterna inom släktet föredrar dämpat ljus, intermediära temperaturer, god luftfuktighet och bra luftcirkulation.
De växer bra i plastkrukor med mossa eller en fin paphiopedilumkompost. De kan odlas under samma betingelser som //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//.
Det är inte ett släkte som är vanligt i odling.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Ste. ophioglossoides|8fc4089e-72e6-4fcf-b474-8b63384c6448]]// Swartz (1799) 

''Uttal''
STEE-liss

''Synonymer''
__Heterotypic Synonyms:__
//Humboldtia// Ruiz & Pav. (1794)
//Physosiphon// Lindl. (1835)
//Dialissa// Lindl. (1845)
//Crocodeilanthe// Rchb.f. (1854)
//Pseudostelis// Schlechter (1922)
//Physothallis// Garay (1953)
//Steliopsis// Brieger (1976)
//Apatostelis// Garay (1979)
//Salpistele// Dressler (1979)
//Condylago// Luer (1982)
//Mystacorchis// Szlach. & Marg. (2001)
//Dracontia// Luer (2004)
//Elongatia// Luer (2004)
//Unciferia// Luer (2004)
//Loddigesia// Luer (2006)
//Lomax// Luer (2006)
//Effusiella// Luer (2007)
//Niphantha// Luer (2010)
!Rekommenderad läasning
[[Wikipedia|http://en.wikipedia.org/wiki/Stelis]]
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/stelis.htm]]
[[Woodstream Orchids|http://www.woodstreamorchids.com/stelis.html]]














































!Allmänt och utbredning
Den växer epifytiskt på stora träd längs vattendrag i bergskogarn i Burma, Thailands övärld, Vietnam, den malaysiska övärlden, Sumatra, Java, Borneo och Filippinerna mellan 500 och 2400 meters höjd.
Namnet kommer från latinets ''floribundus'' som betyder "ymnig blomning" efter blomställningarnas otaliga små blommor.

!Utseende
Det är en 20 till 60 cm hög planta med långa upprätta, stamlika, pseudobulber som är lätt uppsvullna mot basen, 15 till 50 cm lång och drygt en cm bred. Den övre tredjedelen av bulben bär två till sex tunna, avlångt lansettlika blad i två alternerande rader. Bladen blir tio till 20 cm långa och en till två cm breda. Från bladfästena kommer under våren flera stycken upptill 20 cm långa blomstänglar, täckta med fina gråvita hår och översållade med tjogtals fem mm stora blommar tätt tillsammans. Blommorna blir ljust gulgröna med en läpp i purpur med baksidan täckt av fina, gråvita hår. Blommorna producerar en söt nektar från basen av läppen och har en svag, lätt osmaklig doft. Nästan alla blommorna slår ut samtidigt men tyvärr håller de bara några dagar, upptill en vecka. 

!Skötsel
Odla den i intermediära temperaturer med hög luftfuktighet, bra luftcirkulation och låt inte vintertemperaturen gå under tolv grader så kommer plantan trivas. Om temperaturen är för låg under en längre tid kommer bladen att falla. De tunna rötterna behöver en väldränerad kompost som hålls lätt fuktig hela tiden så plantera den i en kruka med mix av fin barkkompost och trädormbunke eller kokosfiber och ge den en ljus skugga och jämn vattning med regelbunden svag gödning. När tillväxten avstannar på hösten kan vattning och gödning minskas utan att helt upphöra.

!Synonymer
__Homotypic Synonyms:__
//Dendrobium floribundum// D.Don (1825)
//Callista floribunda// Kuntze (1891)
__Heterotypic Synonyms:__
//Eria paniculata// N.Wallich (1830)
//Pinalia paniculata// Kuntze (1891)

!Rekommenderad läsning
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092740]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/eriafloribunda.htm]]
[[Vivi´s Orchid Corner|http://viviorchids.com/index.php?module=webpage&id=19&page=6]]















































!Allmänt och utbredning
//Phrag. richteri// [frag-muh-PEE-dee-um RIK-ter-Eye] är en art endemisk för Peru.
J. Schunke V.  är den som getts äran för att ha upptäckt arten den 2 augusti 1985 i distriktet La Banda de Shilcayo i delstaten San Martin i Peru, på vägen från Tarapato till Yurimaguas, på en höjd av 600 meter i de varma, fuktiga bergsskogarna.
Till utseendet liknar den //[[Phrag. pearcei|411dcbfb-cf57-499f-97c7-c74e61c90b70]]// men är mycket större och den har ansetts som en naturhybrid mellan //[[Phrag. pearcei|411dcbfb-cf57-499f-97c7-c74e61c90b70]]// och //[[Phrag. boissierianum|f44465a3-5e54-4566-9ac3-84cc1b69ab11]]// men är numera accepterad som en egen art.
Denna art är uppkallat efter dr H.C. Walter Richter (1904 - 1997) från Crimmetschau, Sachsen, som var den mest kända orkidéodlaren av det forna DDR (Östtyskland). Taxonomiskt tillhör den sektionen Himantopetalum.

!Utseende
Det är en medelstor art som bildar en solfjäder av upptill 60 cm långa och 2 cm breda blad. Den kan börja bilda blomstänglar när som helst på året. Knoppen kommer att dyka upp från mitten av bladen och kommer att se ut som ett tjockare blad i början. När stängeln växer kommer den bli tjockare och rundare och kan nå en höjd av cirka 70 cm. Hos äldre, välväxta plantor kan stängeln förgrenas och blommorna som kommer en i taget blommar under cirka tre veckor. Det är inte ovanligt att en planta kan blomma i upp till tio månader. De doftande, duniga blommorna är större än hos //[[Phrag. pearcei|411dcbfb-cf57-499f-97c7-c74e61c90b70]]// och med fläckar på insidan av läppen. Grundfärgen är grön och gul och med brons på petalerna.

!Skötsel
Ge den en ljus skugga, mellan 10000 och 20000 lux, och intermediära temperaturer.
Den behöver R/O- eller regnvatten för att trivas som bäst. Vattna när den börjar kännas torr, låt den aldrig torka ut helt mellan vattningarna. Ge svag gödning och spola ur komposten med rent vatten varje månad för att förhindra uppbyggnad av salter.
Odla i en kompost som behåller fukten, en mix av fin barkkompost och sphagnum eller perlite.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragrichteri.htm]] 2015-10-28
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=251]] 2015-10-28
[[Dr. Tanaka's Home Page|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/Phrag/ennew.html]] 2015-10-28















































































































!Allmänt och utbredning
Arten växer i höglandsmolnskogar från sydvästra Kina till Indien, Nepal, Vietnam, norra Thailand och Myanmar, på mossiga trädgrenar eller på stenblocken under träden, mellan 1500 och 3400 meters höjd över havet.

!Utseende
//Pln. praecox// är, tillsammans med //[[Pln. maculata|76e3ee68-0e54-479c-b38c-71ffafcb8998]]// och //[[Pln. saxicola|76e3ee68-0e54-479c-b38c-71ffafcb8998]]//, höstblommande. De börjar blomma under september och oktober.
Blommorna hos denna art är lik //[[Pln. bulbocodioides|c836be36-3f37-4282-8671-6385a858c142]]//, men blommorna kommer en eller två åt gången på blomstängeln när bladen börjar gulna och vissna. Blommorna är förhållandevis stora med rosa petaler runt en rörformad vit läpp, fläckad med purpur vid munnen och gult inuti. Även knölarna är tilldragande, vårtiga och brokiga i purpur och grönt som de är. Något som //Pln. praecox// dessutom är ensam om inom släktet.

!Skötsel
Denna art har en kortare viloperiod än många andra pleionearter, och behöver högre temperaturer under denna tid. Runt tio grader kan vara lagom.
Arten är mer epifytisk än många andra pleionearter och föredrar en mossa eller mossiga barkbitar framför en jordbaserad kompost.
De börjar utveckla nya blad och rötter tidigt, ofta innan året är slut. Trots denna nya tillväxt får de inte få för mycket vatten, en vattendusch då och då räcker. Först när rötterna är ordentligt utvecklade börjar man vattna ordentligt.
//Pln. praecox// föredrar ganska varmt med hög luftfuktighet under sommaren. Behandla den som //[[Pln. maculata|76e3ee68-0e54-479c-b38c-71ffafcb8998]]//, som en varmhusepifyt, och den kommer att stortrivas.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum praecox// Smith (1806)
//Dendrobium praecox// Smith (1808)
//Coelogyne praecox// Lindley (1826)
//Cymbidium praecox// Lindley (1826)
__Heterotypic Synonyms:__
//Coelogyne wallichiana// Lindley (1830)
//Pleione wallichiana// Lindley & Paxton (1851)
//Coelogyne praecox// var. //sanguinea// Lindley (1854)
//Coelogyne praecox// var. //wallichiana// Lindley (1854)
//Coelogyne reichenbachiana// T.Moore & Veitch (1868)
//Coelogyne birmanica// Rchb.f. (1882)
//Coelogyne praecox// var. //tenera// Rchb.f. (1883)
//Pleione reichenbachiana// Kuntze (1891)
//Pleione birmanica// B.S.Williams (1894)
//Pleione concolor// B.S.Williams (1894)
//Pleione praecox// var. //birmanica// B.Grant (1895)
//Pleione praecox// var. //candida// Pfitzer (1907)
//Pleione praecox// var. //alba// E.W.Cooper (1951)
//Pleione praecox// var. //wallichiana// E.W.Cooper (1951)
//Pleione praecox// var. //reichenbachiana// Torelli & Riccab. (2000)
//Pleione praecox// f. //candida// O.Gruss & M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleionepraecox.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=praecox&grupp=pleione&avdelning=latinsktNamn&huvudavdelning=rad]]





































































































































































!Allmänt och utbredning
Släktet //Platystele// innehåller <$view field="count"/> av de kanske minsta orkidéarterna. De växer vitt spridda i höglandets svala molnskogar från Mexiko till Bolivia med enstaka arter i Brazilien.
Namnet kommer av den breda formen på könspelaren inom släktet.

!Utseende
Dessa minimala epifyter karaktäriseras av att de växer i täta ruggar med kortstammiga blad, tre till fyra cm långa som liksom blomstängeln kommer direkt från jordstammen. På stängeln kommer många små blommor som slår ut i succession under flera veckor. Efter att blomman har vissnat fortsätter de enskilda ovarierna att förlängas, även om de inte pollinerats, tills de nästan liknar en kam. Blomstängeln kan överleva mer än ett år, medan den hela tiden förlängs med nya blommor som slår ut i toppen av stängeln, en eller två åt gången. Blommorna har nästan genomskinliga sepaler och petaler. Läppen är enkel och hänger fast vid basen den piedestalliknande könspelaren. Denna är kort och bred med två polliner.

!Skötsel
De odlas under samma förhållanden som //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//. Håll plantan i halvskugga, gärna svalt. Plantera dem i fin barkkompost med perlite eller sphagnum. Vattna regelbundet och håll komposten fuktig. På grund av sin ringa storlek behöver de fuktas ofta och en ganska hög luftfuktighet hjälper till att hålla plantan vid bästa hälsa.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Pls. compacta|872cfe8c-5f38-4bd6-916d-0d7769e428d4]]// Ames (1910) men grundaren av släktet är Schlechter (1910)

''Uttal''
plat-ee-STEE-lee

''Synonymer''
N/A

!Rekommenderad läsning
[[Orchids|http://www.orchids.co.in/orchid-plant/platystele.shtm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Platystele]] 2015-01-10




















































!Allmänt och utbredning
Arten växer terrestriskt i lövskogar eller litofytiskt på mosstäckta kalkklippor som ständigt fuktas av dimma och stänk från vattendrag från havsnivå till 1500 meters höjd i Japan, Kina, Vietnam, Kambodia, Laos till Sumatra, Java, Borneo, New Guinea Filippinerna. Arten är en av de mest vittspridda och variabla inom släktet. Även om vissa experter har ansett att arten egentligen består av fler olika närbesläktade arter, anser de flesta att det är en och samma, variabla, art inom hela spridningsområdet. 
Denna art har förfört mänskligheten under årtusenden. Den finns omnämnd redan av Confucius 500 år före Kristus och beskrevs av vår egen Linne 1753 i hans ''Species Plantarum''. Det kinesiska ordet för orkide, ''Ian'', är synonymt med just //Cymbidium ensifolium//.

!Utseende
Den har ett kompakt växtsätt med tre till fyra långa, smala blad och en liten pseudobulb gömd mellan bladbasen. Den blommar med upptill sju cm stora blommor tre till nio stycken väl utplacerade på en tre dm lång, upprätt blomstängel som kommer under sensommaren eller tidig höst. 
Blommorna är inte så hållbara som hos många andra //[[Cymbidium|96a115b4-bf33-4e6d-beb6-529e665f3585]]// men de håller upptill tre veckor, och de kompenserar genom en stark och angenäm doft. Plantorna är mycket variabla i färgen hos blad och blommor. Vanligen är blommorna i olika nyanser av rödbrunt på en grön bakgrund men det finns nästan helt röda likaväl som albinovarianter med helt gröna blommor.

!Skötsel
Den är värmetolerant och trivs bra utomhus på en solig plats under sommaren med bara skuggning för den starkaste middagssolen.
Ge en porös väldränerad kompost med mycket humus. Den har ett kompakt växtsätt och trivs i små krukor. En fullvuxen planta passar ypperligt i en 15 cm kruka. Dock får den långa rötter så den växer bäst i djupa krukor. 
Låt den inte torka ut helt under den varma sommaren utan håll komposten lätt fuktig hela tiden. Under vinter kan vattningen reduceras utan att plantan får torka ut helt. Var försiktig vid vattningen så inte vatten stannar i bladfästena, särskilt unga skott är känsliga och ruttnar lätt, speciellt under de svalare vintermånaderna.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum ensifolium// Linne (1753)
//Limodorum ensatum// Thunb. (1784)
//Jensoa ensata// Raf. (1838)
__Heterotypic Synonyms:__
//Cymbidium xiphiifolium// Lindley (1821)
//Cymbidium ensifolium// var. //striatum// Lindley (1837)
//Cymbidium estriatum// Lindley (1840)
//Cymbidium micans// Schauer (1843)
//Cymbidium albomarginatum// Makino (1912)
//Cymbidium ensifolium// f. //flaccidior// Makino (1912)
//Cymbidium gyokuchin// Makino (1912)
//Cymbidium gyokuchin// var. //soshin// Makino (1912)
//Cymbidium koran// Makino (1912)
//Cymbidium niveomarginatum// Makino (1912)
//Cymbidium shimaran// Makino (1912)
//Cymbidium yakibaran// Makino (1912)
//Cymbidium arrogans// Hayata (1914)
//Cymbidium misericors// Hayata (1914)
//Cymbidium misericors// var. //oreophilum// Hayata (1914)
//Cymbidium rubrigemmum// Hayata (1916)
//Cymbidium gonzalesii// Quisumb. (1940)
//Cymbidium ensifolium// f. //arcuatum// T.C.Yen (1964)
//Cymbidium ensifolium// f. //falcatum// T.C.Yen (1964)
//Cymbidium ensifolium// var. //susin// T.C.Yen (1964)
//Cymbidium ensifolium// var. //misericors// T.P.Lin (1977)
//Cymbidium gyokuchin// var. //arrogans// S.S.Ying (1977)
//Cymbidium kanran// var. //misericors// S.S.Ying (1977)
//Cymbidium ensifolium// var. //rubrigemmum// T.S.Liu & H.J.Su (1978)
//Cymbidium ensifolium// var. //yakibaran// Y.S.Wu & S.C.Chen (1980)
//Cymbidium ensifolium// var. //xiphiifolium// S.S.Ying (1990)
//Cymbidium prompovenium// Z.J.Liu & J.N.Zhang (1998)
//Cymbidium yongfuense// Z.J.Liu & J.N.Zhang (1998)
//Liuguishania taiwanensis// Z.J.Liu & J.N.Zhang (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cymbensifolium.htm]]
[[San Diego County Orchid Society|http://www.sdorchids.com/www/cym_ens_article.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=ensifolium&grupp=cymbidium&avdelning=latinsktNamn&huvudavdelning=rad]]
























































!Allmänt och utbredning
//Calanthe// är ett ganska stort och utbrett släkte med <$view field="count"/> terrestriska arter. Det är uppdelat i två sektioner, ''Eucalanthe'' och ''Preptanther'', där arterna från de olika sektionerna inte kan bilda hybrider med varandra. Arter från //Calanthe// återfinns i alla tropiska områden men är koncentrerade till Asien. En del arter gränsar till subtropiska områden som Taiwan, Indien och Madagaskar. //[[Cal. discolor|2d2c6e58-5357-4a74-a866-bc1da63ea046]]// är en välkänd art i Japan, de södra delarna av Korea och Kina. I folkmun kallas den ''海老根'' som kan översättas med "räk-rot" efter formen på plantans pseudobulber och rotsystem.
Den första artificiellt producerade orkidéhybriden var //Calanthe// Dominii, en korsning mellan //Calanthe masuca// (numera //[[Cal. sylvatica|4515a969-e221-4cfc-99c6-dafa7de2ff01]]//) och //Calanthe furcata// (numera //[[Cal. triplicata|088e342c-a74e-4ef2-9f6b-3cafcd0d03ab]]//) skapad av John Dominy 1853. Den blommade tre år senare, 28 oktober 1856. En hortonom varnade John Dominy med orden ''You´ll drive the botanists mad''. Och kanske hade han rätt. Mr Dominy startade en trend som övergår allt annat. Han hade producerat 25 orkidéhybrider när han gick i pension 1880. Vid sekelskiftet fanns det mer än 1.000. Och idag är antalet mer än 200.000 varianter och ökar fortfarande. Varje år kommer cirka 2.000 nya hybrid av alla former, storlekar och färger, och en del är rent bisarra.
Sitt vetenskapliga namn har släktet fått från grekiskans ''kalos'' som betyder "vacker" och ''anthos'' för "blomma".

!Utseende
De växer från underjordiska knölformade rotstockar. Arterna från sektionen ''Eucalanthe'' är lövfällande och har grågröna pappersaktiga täckblad som omsluter pseudobulberna. De i sektionen ''Preptanthe'' har små bulber och blad som lever länge ger året-runt-gröna plantor.
Från toppen av bulben kommer två läderartade blad som är veckade i bladets hela längd, upptill 30 cm långa. Blomstängeln kan bli uppemot en halvmeter med tio till 25 blommor som kommer under juni till juli. Om blommorna får sitta kvar och producera frökapslar kan nästa års blomning reduceras eller helt utebli.

!Skötsel
Arterna från de två olika sektionerna kräver lite olika skötsel. Den ena typen är lövfällande och behöver en torr viloperiod under vintern. De har vanligen riktigt stora bulber. De lövfällande //Calanthe// härstammar från varma asiatiska skogar med fuktig vår och sommar, och torr höst och vinter. De växer terrestriskt på skogsmarken i djupa fickor med halvmultnad lövkompost, på ruttnade stammar och i sprickor mellan stenar. Temperaturen håller sig mellan 13 till 26 grader, med ett ljust indirekt solsken mellan 18000 till 25000 lux. Från vår efter det att det nya skottet kommit till tidig höst behöver de en balanserad gödning vid varje vattning. Vattningen är viktig, håll komposten jämnt fuktig efter att det nya skottet är ordentligt uppe. När bladen börjar gulna på hösten, minska vattenmängden och låt plantan torka ut mellan vattningarna. Bladen vissnar och dör. Håll den lätt fuktig med regelbundna fuktningar av kompostytan medan blomstängeln framträder och blommar. Undvik att få vatten på blommorna som lätt får fula fläckar. Blommorna kan hålla flera veckor till några månader. Dela bulber och omplantera när den nya tillväxten börjar synas under tidig vår.
Den andra typen har små bulber eller saknar dem helt. Dessa behåller sina blad året runt och behöver en mera jämn skötsel hela året. 
Plantorna växer i olika temperaturer beroende på deras naturliga habitat. De behöver ljus halvskugga till halvskugga. Var försiktig vid urtagningen ur krukan, bulberna är sköra och hos de flesta arterna finns en midja på bulberna där de lätt bryts. Om de bryts i bitar, låt delarna torka och plantera horisontellt i en kruka så kan de rota sig och skicka nya skott. Dela försiktigt isär bulberna och låt torka över natten. Plantera dem i en humusrik jordblandning av två delar jord, två delar bark och en del perlite eller annan humusrik jordmix. Vid planteringen behöver bulberna bli halvt begravda i komposten, men inte så djupt att det nya skottet täcks, då riskerar det att ruttna. Håll bulben och fyll upp med komposten till någon cm __under__ bulbens bas. Fyll därefter på med en grövre barkkompost eller grus som ger stadga men låter vattnet dränera bort från bulben. Vattna __inte__ plantan omedelbart efter planteringen, det finns inga levande rötter som kan ta upp fukten så bulben riskerar bara att ruttna. Ställ plantan ljust där den får god luftfuktighet och luftcirkulation. När det nya skottet är tio till femton cm långt kan man börja se de nya rötterna. Börja vattna så snart rötterna är ett par cm ner i komposten.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Arethuseae
''Undertribus'': Bletiinae

''Typart''
//[[Cal. triplicata|088e342c-a74e-4ef2-9f6b-3cafcd0d03ab]]// Ames (1907)

''Uttal''
kal-AN-thee

''Synonymer''
__Heterotypic Synonyms:__
//Alismorkis// Thouars (1809)
//Alismorchis// Thouars (1822)
//Centrosis// Swartz (1822)
//Amblyglottis// Blume (1825)
//Zoduba// Buch.-Ham. (1825)
//Centrosia// A.Rich. (1828)
//Styloglossum// Breda (1829)
//Zeduba// Ham. (1842)
//Ghiesbreghtia// A.Rich. & Galeotti (1845)
//Preptanthe// Rchb.f. (1853)
//Calanthidium// Pfitzer (1888)
//Aulostylis// Schltr. (1912)
//Paracalanthe// Kudô (1930)

!Rekommenderad läsning
[[Dave"s Garden|http://davesgarden.com/guides/articles/view/2406/]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Calanthe]]
[[Merkle"s Orchids|http://www.merklesorchids.com/CulturePgs/calanthe.html]]
[[CultureSheet|http://culturesheet.org/orchidaceae:calanthe]]





































!Allmänt och utbredning
Arten återfinns i Thailand och den kinesiska provinsen Yunnan mellan 1400 och 1500 meters höjd.

!Utseende
Det är en miniatyrart med ärtrunda pseudobulber som inte blir större än fem mm stora. Varje bulb bär ett ovalt utdraget, knappt centimeterstort blad och under sensommaren en drygt fem mm stor klargul blomma. Sepalerna har orange ränder och läppen är helt orange.

!Skötsel
Den behöver en halvskuggig växtplats med intermediära temperaturer. Vattna regelbundet och håll komposten fuktig, låt den inte torka ut. Odlas med fördel monterad eller i låga skålar med fukthållande kompost där den kan breda ut sig på ytan.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbdidymotropis.htm]] 2014-12-10
[[Journal of Tropical and Subtropical Botany|http://jtsb.scib.ac.cn/jtsb_en/ch/reader/create_pdf.aspx?file_no=2637&flag=&journal_id=jtsb_en&year_id=2011]] 2011,19(2): 149~151














!Allmänt och utbredning
Den växer terrestriskt och litofytiskt i Mexiko, Guatemala, Honduras, Nicaragua, Costa Rica och Panama mellan 600 och 1700 meters höjd.
Arten är uppkallad efter [[Alexander von Humboldt|https://sv.wikipedia.org/wiki/Alexander_von_Humboldt]] (14 september 1769 – 6 maj 1859), tysk friherre, naturforskare och upptäcktsresande i Syd- och Centralamerika och till Centralasien. Det har förts långa och omfattande diskussioner om //Phrag. humboldtii// är en centralamerikansk synonym till //[[Phrag. warscewiczii|]]// som växer i Peru och Bolivia, men i skrivande stund, september 2015, är //Phrag. humboldtii// en accepterad art av [[World Checklist of Selected Plant Families|http://apps.kew.org/wcsp/home.do]].

!Utseende
Det är en liten art med en rosett mörkgröna blad, 20 till 30 cm långa och tre till fyra cm breda. Under våren eller sommaren kommer en 15 till 35 cm lång blomstängel med en till fyra samtidigt öppna, tio cm stora, blommor. Blommorna är gulaktigt gröna med brunaktig nätmönster. Läppen är starkt rödfärgad, speciellt nära öppningen. Den dorsala sepalen är tio till 15 cm lång och två eller tre cm bred, gulgrön med gröna, längsgående ränder.

!Skötsel
De bör hållas jämnt fuktig under hela året och får inte torka ut för länge. Växten är variabla i sitt temperaturspann, och kan klara sig bra i svala till varma omgivningar, upptill 30 grader som varmast. De föredrar en ljus växtplats med indirekt sol. Komposten måste hållas konstant fuktig utan att tillåtas torka ut för mycket. De kräver inte mycket gödning och bör vattnas med rent vatten eftersom de är känsliga för uppbyggnad av salter i komposten. Växterna kan tolerera mycket vatten så länge som komposten förblir i bra skick. De kan med fördel odlas i en blandning av vitmossa, kol och perlit, eller medelgrov barkkompost med perlit.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium humboldtii// Warsz. (1852)
__Heterotypic Synonyms:__
//Cypripedium caudatum// var. //roseum// Delchev. (1867)
//Selenipedium warscewiczii// Rchb.f. (1873)
//Cypripedium caudatum// var. //warscewiczii// Kerch. (1894) nom. superfl.
//Phragmipedium caudatum// var. //roseum// Pfitzer (1903)
//Phragmipedium monstruosum// Archila (1999)
//Phragmipedium popowii// Braem, Ohlund & Quéné (2004)
//Phragmipedium exstaminodium// subsp. //warszewiczii// Dressler (2005)
//Phragmipedium warscewiczii// Christenson (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phraghumboldtii.htm]] 2015-10-18



















!Allmänt och utbredning
Arten återfinns i östra och västra delen av Himalaya, provinsen Assam i Indien, Bhutan, Sikkim, Nepal och Thailand mellan 800 och 2200 meters höjd över havet. Vanligtvis växer de vid basen av träd där det är fuktigare, och samtidigt är skyddade mot alltför stora variationer i temperatur. I avskogade områden som saknar träd kan de växa litofytiskt.
Antalet kromosomer är 2n=40. Plantorna är självpollinerande, och blommorna faller två veckor efter självpollineringen.
Namnet kommer från latinets ''denudare'' som betyder "bar" efter artens karaktärsdrag att blomma på bladlösa pseudobulber.

!Utseende
Den har uppåt 25 cm långa och sex till åtta mm tjocka pseudobulber som är mer lika avlånga, cylindriska, gula stammar, täckta med trattformade täckblad som övergår i fem till tio cm långa, tunna, långsmala blad, en eller två cm breda. Innan blomningen fäller arten sina blad. Från noderna nära toppen kommer under sommaren eller hösten tio till 15 cm långa blomstänglar med mer än ett dussin spindellika blommor per stängel. Varje bulb ger vanligen tre till fyra tunna blomställningar. Blommorna är mindre än två cm stora med långa slanka sepaler och petaler i ljust gröna nyanser. Läppen är oftast grön, men kan vara vit eller gulaktig med vågiga kanter och rödaktig ådring. 

!Skötsel
Ge den en ljust växtplats utan direkt solljus och ge svag gödning varje vecka. Den kan med fördel odlas monterad eller i små krukor med en väldränerad kompost.
//Den. denudans// är väl en lövfällande art som kräver en distinkt, torr vintervila med flera månader utan vatten eller gödning. Vattningen bör inte återupptas förrän den nya tillväxten syns på våren.
I sitt naturliga habitat får arten fem sommarmånader med mycket regn och en luftfuktigheten på nästan 90% för att i slutet av den sju månader långa torrperioden sjunka till 40%. Månadsmedelnederbörden i december och januari ligger på mindre än 10 mm och kan under den fuktiga perioden maj till augusti stiga till 325 mm i månaden. Medeltemperatur under sommaren är runt 30 grader på dagen och ner till 22 nattetid. Vintertid ligger temperaturen runt 18 grader och sjunker till tio grader under nätterna.

!Synonymer
__Homotypic Synonyms:__
//Callista denudans// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendenudans.htm]]
































































































































































































































!Allmänt och utbredning
Arten kommer från provinserna Guangdong och Yunnan i Kina mellan 1400 och 2800 meters höjd.

!Utseende
Denna arts blommor är distinkt formade. Sepalerna är korta och breda, och omsluter en läpp som inte är lika fransig som de flesta //[[Pleione|1e3d43d5-efd2-44ea-ad0b-df6d8cf5951e]]//. Sepalerna är färgade i lila-rosa eller sällan vita, med en vit läpp försedd med matt lila-bruna prickar och markeringar. På läppen finns också höga, brandgula kölar.

!Skötsel
Ge plantorna extra mossa i komposten. Till skillnad mot de flesta andra inom släktet som trivs i barkkompostblandningar föredrar //Pln. chunii// ren sphagnum.

!Synonymer
__Heterotypic Synonyms:__
//Pleione milanii// Braem (1999)
//Pleione hookeriana// var. //milanii// Torelli & Riccab. (2000) no exact basionym page
//Pleione hookeriana// var. //sinensis// G.Kleinh. (2000)

!Rekommenderad läsning
[[Neovita|http://www.neovita.com/orkideer/no.cgi?vara=pleione_chunii&varugrupp=pleione&avdelning=kallvilaorkideer&huvudavdelning=butik]]
[[the Pleione website|http://www.pleione.info/imagepages/thumbnailpages/chunii%20thumbs.htm]] bilder












































































!Allmänt och utbredning
//Paph. bougainvilleanum// är en sällsynt art som upptäcktes av Wentworth i närheten av staden Kieta så sent som 1967 och som endast förekommer på en lokal på ön Bougainville i Papua Nya Guinea i västra Stilla havet. Ön har även fått ge namn åt arten. Där växer den i djupa, fuktiga bergsmolnskogar, epifytiskt lågt ner på träd, med rötterna inbäddad i lövkompost eller tjock mossa, på en höjd av 1100 till 1850 meter över havet.
//Paph. bougainvilleanum//, fortfarande vanligt i naturen, är ytterst sällsynt i handeln, helt enkelt därför att handlarna inte hitta ett sätt att smuggla denna art från Bougainville eller Solomonöarna i några större kvantiteter. Den har återinförts fyra gånger i odling, på 80-talet ett parti av mer än 2000 plantor, i början av 1991 cirka 800 plantor i Europa och 400 i USA och 2004 återigen 500 plantor. De gick till många olika odlare så det är inte en plantskolas fel att alla dog. Alla nu odlade plantor, mars 2015, kommer från en enda insamling 2006.
Den har av vissa ansetts som bara en synonym till //[[Paph. violascens|39c0d0bf-724c-4ca8-8631-0b73f082a3f8]]// men Cribb noterar att medan det bara kan vara en mängd olika varianter av //[[Paph. violascens|39c0d0bf-724c-4ca8-8631-0b73f082a3f8]]//, har dess olika egenskaper och geografiska separation från denna art föranlett honom att lista den som en egen art. Han noterar dock att större botaniska kunskaper om de livsmiljöer som denna art växer i, så småningom kan leda till en annan slutsats.
Det finns två accepterade varianter: //Paph. bougainvilleanum// var. //bougainvilleanum// och //Paph. bougainvilleanum// var. //saskianum// O.Gruss & Roeth (1999). Kromosomtalet är 2n=40.

!Utseende
Det är en medelstor planta som bär sex eller sju långsmala, ljusgröna blad mönstrade i mörkare grönt. Bladen kan bli mer än 20 cm långa och mellan två och fem cm breda. Den kan blomma under november till december och igen efter en kort vintervila i april till juni. Det kommer en två dm lång, tätt översållad av purpurfärgade hår, ljusgrön blomstängel som bär en ensam blomma. Den grön, vit och purpurfärgade blomman blir drygt fem cm stor och kan hålla två eller tre månader.

!Skötsel
Dess naturliga livsmiljö är ständigt fuktigt med en medelårsnederbörden som är mer än 250 cm, där årstiderna främst markeras av variationer i nederbörden. Den "torra" säsongen kommer med sydöstra monsunen från december till mars då det är återkommande, men kraftiga regn. Den nordvästra monsunen ger skyfall med molniga förhållanden under merparten av återstoden av året. Dagstemperaturerna sommartid ligger i genomsnitt mellan 19 och 28 grader, med vintertemperaturerna fem grader lägre. På grund av den höga fuktigheten som krävs är en öppen, väldränerad kompostmix nödvändigt, men med lite mossa för att säkerställa att det alltid är tillräckligt med fukt. Den behöver en skuggig placering med jämn fuktighet, hög luftfuktighet hela året och god luftcirkulation utan någon uttalad period med torka eller svalare temperaturer. Vattna regelbundet var tredje eller var fjärde dag med vatten av god kvalité, regnvatten eller R/O. Arten är känslig för uppbyggnad av salter i komposten.
Mellan 5000 och 7500 lux räcker för optimal tillväxt. Under konstbelysning behöver den stå minst 50 cm under lysrören. Den tillväxer långsamt och kan vara svår att driva upp från småplanta, men en välvuxen planta är lättodlad och långlivad.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum violascens// var. //bougainvilleanum// Koop. (1995)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphbougainvilleanum.htm]] 2015-02-18
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/bougainvilleanum/index.html]] 2015-02-18
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_bougainvilleanum]] 2015-02-18




































!Allmänt och utbredning
Arten växer alltid skuggigt med rötterna begravda i tjock, fuktig mossa, epifytiskt i täta, mossiga ekskogar med kraftiga buskskikt av rhododendron och azalea i ögruppen Filipinerna mellan 1300 och 2700 meters höjd.
De flesta av arten plantor samlades ursprungligen in vid Mt. Santo Tomas vid 2500 m höjd nära Baguio på centrala Luzon.
Namnet gavs för att hedra [[den engelska drottningen Victoria av Storbritannien|http://sv.wikipedia.org/wiki/Viktoria_av_Storbritannien]].

!Utseende
Plantan bildar kluster med långa, smala, hängande, stamliknande pseudobulber med tydliga noder. Varje bulb blir sällan mer än 25 cm lång, avsmalnande mot basen och kan bära upptill ett dussin långsmala blad i två rader längs över delen mot toppen. De hållbara, fem cm stora blommorna kan komma när som helst under året och ofta mer än en gång per år men den huvudsakliga blomningsperioden är maj till juni. Från sidorna av de äldre, bladlösa bulberna kommer under flera år små samlingar med vanligen tre stycken blommor på en kort blomstängel. Ljus och temperatur kan påverka nyansen på blommorna, men för det mesta är sepaler och petaler mörkt violetta eller blå med vitt mot centrum och med en vit läpp med mörkt purpurfärgade ränder. När de står ljust och svalt blir blommorna mörkare blå. Välväxta plantor med kraftiga bulber kan under sensommaren börja producera blomknoppar från bladbaserna vilket får bladen att gula och falla av. Det är helt normalt.

!Skötsel
I sitt naturliga habitat trivs den i svala till intermediära temperaturer under skuggiga växtförhållanden med ordentlig luftcirkulation. Vintertid och om luftcirkulationen är tillräcklig kan den tåla mer ljus, upptill 35000 lux. Under vår och sommar behöver de skyddas mer mot solen och kan nöja sig med 15000 till 25000 lux, liknande som för //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]//.
De behöver hög luftfuktighet och en jämn fuktighet hela året utan att torka ut alltför mycket mellan vattningarna. Speciellt under tillväxtperioden behöver den en ymnig vattning, men under vinter kan den få en lite torrare vila med vattning bara varannan vecka. Det gör inget om bulberna börjar skrumpna lite, de kommer igen när vattningen återupptas. Ge svag gödning varannan vattning under sommaren och var tredje under vinter om den odlas i barkkompost. Om den odlas i ren sphagnum räcker det med hälften så ofta. Skölj igenom komposten ordentligt med rent vatten en gång i månaden för att undvika saltuppbyggnad.
Försök ge den en nattemperatur runt tolv grader och upptill 24 grader under dagen. Sommartid kan den gärna få vistas utomhus.
Den har ett hängande växtsätt som gör den lämplig för montering eller hängande krukor som låter bulberna hänga fritt. I kruka kan bulberna behöva stödjas. Ge den en fin barkkompost eller sphagnum, gärna åtminstone vartannat år. Det är relativt lätt att föröka då det räcker med att plantera en ensam bulb i sphagnum vid omplantering för att den ska klara en delning.

!Synonymer
__Homotypic Synonyms:__
//Pedilonum victoriae-reginae// Rauschert (1983)
__Heterotypic Synonyms:__
//Dendrobium coeleste// Loher (1897)
//Dendrobium victoriae-reginae// f. //album// Valmayor & D.Tiu (1983)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denvictoriareginae.htm]]
[[Akatsuka Orchid Gardens|http://www.akatsukaorchid.com/store/pg/45-Dendrobium-Victoria-Reginae.aspx]]









































!Allmänt och utbredning
Dessa kall- eller svalväxande orkidéer från 500 till 2800 meter över havet, växer framför allt i tempererade regioner från Mexiko till Peru, med en art funnen i den karibiska övärlden samt en art i arkipelagen utanför Panama.
Det finns <$view field="count"/> litofytiska, terrestra och epifytiska arter och tolv naturhybrider, av dessa är ett flertal doftande. De är nära släkt med masdevalliasläktet.
Namnet kommer efter den grekiska nymfen Lycaste, dotter till Priamos kung och syster till den beryktade sköna Helena av Troja.

!Utseende
Pseudobulberna är tjocka, ovala med åsar eller fåror och kommer tätt tillsammans. De får två eller tre tunna blad med tydliga nerver. Bladstorleken är en av nackdelarna vid odling av //Lycaste//, eftersom vuxna plantor tar rejält med utrymme. De flesta arterna fäller sina blad efter blomningen.
Blomstängeln kommer från basen av bulberna och bär en ensam, stor, ofta doftande blomma som håller ungefär en månad. Varje bulb kan producera upptill 15 blommor samtidigt. Arterna producerar blommor i gult, rosa, grönt, orange, vitt, brunt, med prickar och i olika flerfärgsvarianter. Petalerna är vanligtvis relativt små i förhållande till sepalerna.
//[[Lyc. aromatica|97a96d77-036f-4fed-96ad-8ef7f20764b1]]// är en av de arter som snabbt växer till en kraftig planta. Under sommaren får den vackra gula blommor med en söt doft.
//[[Lyc. deppei|be16bcd7-5a8e-462d-8434-4aaf8038f692]]// blommar ungefär samtidigt med stora, brungröna blommor och en svag doft.
//[[Lyc. cruenta|9f3a6577-6e11-4941-876a-fed1b1ee2c14]]// tappar bladen över vintern och producerar sina vackra gulgröna blommor under våren.
//[[Lyc. macrophylla|12630b47-0066-4403-b65b-69d673c8f541]]// är en annan art som är väl värd att odla för sina underbara kopparbruna blommor.

!Skötsel
Många arter växer i bergsområden och tolererar därför låga temperaturer, och växer och blommar därför under liknande förhållanden som cymbidier.
Som en reaktion på den kalla, torra perioden i sitt naturliga habitat fäller vissa arter sina blad innan nytillväxten och blomningen börjar på våren.
De arter som kommer från varmare, mindre bergiga områden växer mer eller mindre hela året och blommar huvudsakligen under sensommaren och hösten. Dessa arter behöver extra tillsyn och värme under vintern.
De föredrar hög luftfuktighet och vattning ovanifrån under tillväxtperioden. Under sommaren växer //Lycaste// tillfredställande på skuggiga eller halvskuggiga platser med skydd för regn och kalla vindar. Speciellt under vintern behöver den skyddas för allt för låga temperaturer. Även om de drar nytta av ordentligt med ljus och luftcirkulation, bränns de stora bladen lätt.
De måste hållas ordentligt vattnade under sommaren. Så snart bladen börjar gulna och falla av reduceras vattningen och temperaturen sänks. Så snart rötterna börjar framträda på våren ökas vattningen igen. Gödning med halva den rekommenderade styrkan producerar snart stora blad och bulber.
//Lycaste// är känsligare än cymbidier för frekvensen av och tiden för omplantering, och behöver ha ny aktiv tillväxt vid tillfället för omplanteringen annars kan rotsystemet lätt bli lidande. Så snart blomningen är över och det nya skottet börjar komma är det dags för omplantering. De bör planteras om regelbundet så snart de visar tecken på att komposten brutits ner alltför mycket. En djup kruka är att föredra, den håller rötterna svalare under sommaren. Komposten bör vara en luftig och väldränerad barkmix med lecakulor och lövkompost.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Lycastinae

''Typart''
//[[Lyc. macrophylla|12630b47-0066-4403-b65b-69d673c8f541]]// Lindley (1843)

''Uttal''
lye-kass-tee

''Synonymer''
__Heterotypic Synonyms__
//Deppia// Raf. (1837) nom. nud.
//Lycobyana// Archila & Chiron (2010)
//Selbyana// Archila (2010)

!Rekommenderad läsning
[[Orchid Societies Council of Victoria inc.|http://www.oscov.asn.au/articles/lycastes.htm]]























































































!Allmänt och utbredning
Arten växer i västra Sydamerikas svala skogar i Venezuela, Colombia, Peru och Ecuador mellan 1100 och 3500 meters höjd över havet.
Namnet kommer från latinets ''contortus'' som betyder "förvriden" och anspelar på de vridna spetsarna på bladen.

!Utseende
Det är en liten klumpbildande epifyt som saknar pseudobulber och vanligen blir mindre än tio cm totalt. I undantagsfall kan den bli upptill 20 cm stor. Bladstjälken, som kommer från en underjordisk stam, är omsluten av fem torra bladskidor. Bladstjälken bär ett ensamt ovalt avlångt, läderartat blad i toppen. Bladen blir inte större än fem cm långt och tre cm brett. Från bladfästet kommer också under sommarhalvåret en lång blomstängel som blir minst lika lång som bladet, upptill sex cm långt. Blomman som kommer ensam på stängeln blir upptill fyra cm lång och en cm bred i gulbruna färgnyanser med prickar eller ränder eller lite av varje. Blommorna är mycket variabla, både i storlek, läppen utseende och färgsättning. Antagligen är det den mest variabla arten inom släktet. Blommorna håller en vecka upptill en månad, lite beroende på temperaturen. Svalare temperaturer ger längre hållbarhet.

!Skötsel
Den föredrar en sval till intermediär temperatur som helst inte ska gå över 25 grader och inte under 14. Blir det för varmt bildar den lätt keikis. Odla den i halvskugga eller ljus skugga, mindre än 10000 lux. Plantera den i fin barkkompost med perlite eller i ren sphagnum. Vattna regelbundet och håll komposten jämnt fuktig med en hög luftfuktighet. Den verkar blomma bättre om den får svala nätter.

!Synonymer
__Homotypic Synonyms:__
//Humboltia contorta// Ruiz & Pavon (1798)
//Stelis contorta// Pers. (1807)
__Heterotypic Synonyms:__
//Restrepia maculata// Lindl. (1846)
//Restrepia antennifera// Lindl. (1859) nom. illeg.
//Restrepia punctulata// Lindl. (1859)
//Restrepia pardina// Lem. (1869)
//Restrepia ecuadorensis// Rolfe (1892)
//Restrepia caucana// Schlechter (1920)
//Pleurothallis fimbrilabia// C.Schweinf. (1953)
//Restrepia apiculata// Luer (1982)
//Restrepia maculata// subsp. //ecuadoriensis// H.Mohr (1996)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/restcontorta.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_contorta]]
[[The Pleurothallid Alliance|http://www.pleurothallids.com/index.php?option=com_content&view=article&id=882&Itemid=58]]




































!Allmänt och utbredning
Det är en liten epifyt eller litofyt från de svalare bergsskogarna av södra Brasilien upptill 1700 meters höjd över havet.

!Utseende
Pseudobulberna är ovala, tillplattade och fyrkantiga. Dessa blir två och en halv cm höga, med två stycken åtta cm långa blad från toppen. Under våren eller sommaren kommer från basen av bulben en hängande blomstängel som blir fem till tio cm lång.
Stängeln bär en eller två hållbara, doftande, klart gula blommor med rödaktiga prickar på läpp och petaler. Blommorna blir fem cm stora, riktigt stora i förhållande till den lilla plantan.

!Skötsel
De kan odlas i hängande korgar eller grunda lerkrukor med en finfördelad, luftig kompost med en andel vitmossa, som snabbt torkar upp efter vattningen. När de tillväxer bör de ges hög luftfuktighet och vattnas rikligt och ofta. När de vuxit klart bör de få en kort viloperiod under tre veckor med mindre vatten tills den nya tillväxten är cirka en cm stor.
Trots att de kommer från de svalare delarna av Brasiliens bergsskogar klarar växten lätt de lite varmare temperaturerna i vanliga lägenheter. Placera den på en skuggig plats, och plantera om ofta.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria xanthina// Lindley (1839)
//Zygopetalum xanthinum// Rchb.f. (1863)
__Heterotypic Synonyms:__
//Promenaea citrina// P.N.Don (1845)
//Eulophia crinita// G.Don (1850)
//Zygopetalum citrinum// G.Nicholson (1887)
//Maxillaria lawrencei// Kraenzlin (1895)
//Promenaea xanthina// var. //major// Cogniaux (1906)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/promxanthina.htm]]
[[OrchidéHuset|http://www.orchidehuset.se/Arkiv/Promenaea%20xanthina%20artikel.htm]]
[[Orchid Society of Northern Transvaal - South Africa|http://www.ont.co.za/promenaeas.htm]]
[[BackyardGardener|http://www.backyardgardener.com/plantname/pda_abad.html]]






































































































!Allmänt och utbredning
Arten påträffas i djup skugga, terrestriskt eller litofytiskt, på branta, mossiga kalkstensklippor eller bambudungar mot norr eller nordväst nära rinnande vatten i norra Vietnam och södra delen av Kina, framförallt regionen Hong Kong och den närbelägna provinsen Guangdong. Det har även rapporterats små populationer från ön Hainan, södra Fujian, södra Guangxi och sydöstra Yunnan mellan 500 och 1600 meters höjd. Det är en sällsynt art med begränsat utbredningsområde och få, fragmenterade växtplatser och populationerna har minskat med 90% senaste årtiondet. Mindre än 250 vuxna individer är kända i nuläget.
Namnet kommer efter blomman färg. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektionen Planipetalum, samma som den närbesläktade //[[Paph. callosum|58cb8f5a-cf0a-4e8f-b8f2-2e3865819dba]]// som har liknande odlingsbetingelser. Arten pollineras av blomflugan //Ischiodon scutellarisi//. Kromosomtalet är 2n=40.

!Utseende
Den bildar tre till åtta långsmala blad vars ovansida är marmorerad i nästan vitt eller ljust och mörkt grönt, undersidan är helt ljusgrön. Bladen blir sju till 17 cm långa och två till fyra cm breda med hårig kanter mot basen. Under sommar till vintern kommer en 12 till 20 cm lång, purpurfärgad, vithårig blomstängel som nästan alltid bär en enda blomma. Mycket sällan får den två blommor på samma stängel. Blommorna blir sju till tio cm stor med den dorsala sepalen vit, mot basen ljust grönaktig, med breda, mörkt purpurfärgade ränder. Petalerna är glänsande purpurfärgade med mörkt lila nerver. Mot basen är petalerna gröna eller gula och översållade med mörka prickar och korta, svarta hår längs kanterna. Även läppen är djupt purpurfärgad med baksidan färgad i grönt. Staminoiden är ljust gul till lila med två gröna fläckar på båda sidorna av den vita mitten.

!Skötsel
//Paph. purpuratum// föredrar en mycket fuktig, väldränerad lövkompost i starkt eroderade kalksten och steniga jordar. Arten behöver en varm, skuggad växtplats med jämn vattning och hög luftfuktighet hela året. Den har tunna blad och vid för låg luftfuktighet kommer den inte att trivas. Dess naturliga utbredningsområde utsätts för hög luftfuktighet och dimma från vinter till vår och kraftiga skyfall från sommar till höst.
Odla i en väldränerad mix av medelgrov barkkompost, perlit och vitmossa. Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattning under fyra veckor på hösten för att inducera blomning. I naturen kan nattemperaturen vintertid gå ner till fyra grader, men den verkar inte behöva någon svalare period för att blomma. Sommartid ligger temperaturen mellan 18 grader nattetid till runt 28 grader dagtid.
Den brukar anses lätt att få i blom, men svår att hålla vid liv.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium purpuratum// Lindley (1837)
//Cordula purpurata// Rolfe (1912)
__Heterotypic Synonyms:__
//Menephora bicolor// Raf. (1838)
//Cypripedium sinicum// Hance (1852)
//Paphiopedilum sinicum// Stein (1892)
//Paphiopedilum aestivum// Z.J.Liu & J.Yong Zhang (2001)
//Paphiopedilum purpuratum// var. //hainanense// F.Y.Liu & Perner (2001)
//Paphiopedilum purpuratum// f. //album// O.Gruss & Koop. (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphpurpuratum.htm]] 2015-08-10
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/purpuratum/index.html]] 2015-08-10
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242335747]] 2015-08-10
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_purpuratum]] 2015-08-10
[[Burleigh Park Orchids|http://www.speciesorchids.com/PaphiopedilumPurpuratum.html]] 2015-08-10










!Allmänt och utbredning
Det är en svalväxande epifyt från bergsskogarna i Myanmar och Vietnam. De föredrar primära bergskogar från 700 till 1200 meters höjd över havet.

!Utseende
Bladen bör vara ljust gröna, inte gulaktiga eller mörkt grön. Om bladen är rödaktiga kan det indikera för mycket ljus. Blommorna kommer på en två dm lång blomstängel som bär upptill åtta vaxartade blommor. Dessa blir drygt sju cm tvärs över, i färger från vitt till gult. De har ofta rödbruna prickar, men kan förekomma helt utan markeringar. Blommorna är vaniljdoftande, men enbart under kvällen och natten. Blomstängeln kommer under sommaren, med eventuellt en andra blomning under hösten.

!Skötsel
Den föredrar liknande odling som för //[[V. coerulea|1fa39dd9-940e-4f5e-a1bf-e9ae5bab2312]]//, men med mindre solljus. Som alla vandor behöver den mycket indirekt ljus och hög luftfuktighet. Under tillväxten behöver den massor av vatten.

!Synonymer
__Heterotypic Synonyms:__
//Vanda denisoniana// var. //tessellata// Guillaumin (1933)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/vandennisonana.htm]]














!Allmänt och utbredning
Denna miniatyrepifyt är som namnet antyder endemisk för Filippinerna, där den växer i bergsskogar mellan 700 och 2100 meters höjd.

!Utseende
De bildar täta mattor med små, avlånga pseudobulber som övergår i ett lika avlångt, läderartade, nästan pennliknade blad, upptill åtta cm långt. Basen av bulben är täckt av torra, bruna täckblad. Från basen av de nya skotten kommer en centimeterkort blomstängel med en ensam, gnistrande snövit blomma som bara blir fyra mm stor. Blommorna kan komma när som helst under året och har en stark doft av hyacint.

!Skötsel
Varmväxande, temperaturen bör inte gå under tio grader. Odla den gärna monterad på kork eller hängande i en korg. Ge en ljus halvskugga runt 15000 till 25000 lux och en jämn fuktighet året runt. Vattna tre till fem gånger i veckan, den tycker inte om att torka ut. Göd med svag dos varannan vecka.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/ceratophilippinense.htm]]
[[NotSoGreenThumb|http://www.notsogreenthumb.org/RonGriesbeck/other_genera/ceratostylis_philippinensis.htm]] (bild)























!Allmänt och utbredning
//Paph. guangdongense// upptäcktes 2010 i Yunkai Mountains i den södra delen av den kinesiska provinsen Guangdong där den växer på humusrika klippor i fuktiga molnskogar mellan 1100 0ch 1500 meters höjd. För närvarande är endast två lokaler med mindre än 100 individer kända.
DNA-analysen fastslog att den är nära besläktad med men skiljer sig från //[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]//. Som ett resultat behandlas den som en ny art. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Paphiopedilum.

!Utseende
Den påminner den mycket om //[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]// från vilken den skiljer sig genom att ha smalare blad, inte bredare än två cm, och saknar lila prickar på bladens undersida. Den bildar rosetter om fem till sex blad, tio till 22 cm långa. Under september till november kommer en drygt tolv cm lång blomstängel som bär en ensam blomma. Blommans dorsala sepal är vit eller ljust grön, ibland ådrad med ljust lila till brunt och saknar de purpurfärgade prickarna som //[[Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]]// har. 

!Skötsel
Ge en skuggig placering och intermediära temperaturer året runt. Odla i en väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag

!Synonymer
N/A

!Rekommenderad läsning
;Li-Jun Chen, Zhong-Jian Liu, You-Yu Li, Li-Qiang Li, 2010
://A new orchid// Paphiopedilum guangdongense //and its molecular evidence//
:Journal of Systematics and Evolution, Volume 48 Issue 5, Pages 350–355
:DOI: 10.1111/j.1759-6831.2010.00092.x































































































!Allmänt och utbredning
Arten växer terrestriskt i varma och fuktiga skogar i Indonesien och Burma mellan 70 och 1800 meters höjd över havet.
//Ludisia discolor// tillhör en grupp släkten i undertribusen Goodyerinae som gemensamt kallas "Juvelorkidér". Dessa odlas mer för sitt vackra bladverk än för blommorna som oftast är ganska oansenliga. Det är den enda arten inom släktet //[[Ludisia|2e46103f-39e7-4868-8aff-aa60b62d1df6]]//. Det finns dock en variant känd som //Ludisian discolor// var. //dawsoniana//.
1818 beskrev John Ker-Gawler arten som //Goodyera discolor//. 1825 flyttade A. Richard den till ludisiasläktet, //Ludisia discolor//. Ytterligare några år senare, 1840, flyttade John Lindley den till släktet //Haemaria// som på 1970-talet helt togs bort och arten fick tillbaka sitt gamla namn, //Ludisia discolor//.

!Utseende
//Lus. discolor// är en markväxande orkidé med krypande växtsätt. Bladen är brungröna, vackert mönstrade med nerverna som inlägg i orange eller rött. Blommorna som vanligen kommer under hösten eller vintern när det börjar bli lite svalare, är vita med en vriden, klart gul könspelare. De enskilda blommorna är små, bara knappt två cm stora, men de kommer i kluster på en upprätt blomstängel och håller i två till tre veckor och doftar under tiden.

!Skötsel
De växer i den humusrika jorden eller lövkomposten på marken i skuggiga, fuktiga men väldränerade jordar. Odlade i krukor kan de var besvärliga att få att trivas, de skickar snabbt utlöpare ut ur krukan. Eftersom de växer långt nere på marken i regnskogen föredrar de en ganska skuggig växtplats. Utsätt dem inte för direkt solsken eller alltför starkt ljus. De trivs utomordentligt i terrarier under lysrör. Temperaturen får gärna ligga mellan 24 till 30 grader under dagen och tio grader lägre på natten. Under kortare perioder kan de klar så högt som 38 grader och så lågt som ner till tio grader. Vid höga temperaturer måste luftcirkulation och -fuktighet vara hög för att inte skador ska uppkomma.
Håll dem jämnt fuktiga med en hög luftfuktighet, men sörj för god luftcirkulation för att förhindra uppkomst av mögel och röta.
De behöver en jämn, låg gödning, under tillväxten. Göd med en fjärdedels gödning varannan vecka under våren till tidig höst och en lätt gödning en gång i månaden under höst och vinter. Skölj igenom komposten med rent vatten mellan gödningarna så inte salter byggs upp.
Eftersom de är terrestrisk behöver de en kompost som håller fukten men inte är konstant blöt. Planteringsjord med sand, sphagnum och perlite är utmärkt, men även mycket fin barkkompost fungerar. Det bästa att plantera i är låga, vida krukor eller skålar då de växer ovanpå komposten och gärna brer ut sig.
Håll koll efter sniglar och snäckor som älskar de köttiga stammarna på plantorna.

!Synonymer
__Homotypic Synonyms:__
//Goodyera discolour// John Ker-Gawler (1818)
//Neottia discolour// Steud. (1821)
//Gonogona discolor// Link (1822)
//Haemaria discolor// Lindley (1840)
//Orchiodes discolour// Kuntze (1891)
__Heterotypic Synonyms:__
//Myoda rufescens// Lindley (1834)
//Dicrophyla elegans// Raf. (1838), nom. illeg.
//Ludisia furetii// Blume (1859)
//Ludisia odorata// Blume (1859)
//Goodyera rubrovenia// B.S.Williams (1862)
//Anoectochilus dawsonianus// H.Low (1868)
//Anoectochilus ordianus// K.Koch(1871), nom. subnud.
//Goodyera ordiana// B.S.Williams (1871)
//Anoectochilus ordeanus// Jennings (1875)
//Goodyera ordeana// Boxall (1880)
//Goodyera rodigasciana// L.Linden (1886)
//Haemaria otletae// Rolfe (1891)
//Haemaria rubrovenia// Rchb.f. (1891)
//Haemaria discolour// var. //dawsoniana// B.S.Williams (1894)
//Haemaria discolour// var. //denisoniana// Kerch. (1894)
//Haemaria discolour// var. //ordeana// B.S.Williams (1894)
//Haemaria discolour// var. //concolor// Ridl. (1896)
//Haemaria discolour// var. //rhodoneura// Schlechter (1913)
//Haemaria discolour// var. //trilineata// Schlechter (1913)
//Haemaria dawsoniana// Hasselb. (1915)
//Haemaria pauciflora// Gagnep. (1933)
//Haemaria discolour// var. //condorensis// Gagnep. (1934)
//Haemaria discolour// var. //grandis// Gagnep. (1934)
//Kuhlhasseltia carrii// Holttum (1947)
//Ludisia dawsoniana// Aver. (1988
//Ludisia otletae// Aver. (1988)
//Ludisia discolour// var. //ordiana// J.M.H.Shaw (2009)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/ludiscolor.htm]]
[[Camp Lot A Noise Tropicals|http://www.clanorchids.com/culture/jewel.html]]
[[Lindas Orchid Pages|http://orchidlady.com/pages/orchidGarden/jewelOrchids.html]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/ludisiaDiscolor.html]]










































































!Allmänt och utbredning
Denna litofytiska art, som för närvarande extremt hotade, är känd endast från eroderade kalkstenklippor i öppna bergsmolnskogar från 450 till 1450 meters höjd i de kinesiska provinserna sydvästra Guangxi, sydväst Guizhou och sydöstra Yunnan och liknande livsmiljöer på andra sidan gränsen in i norra Vietnam.
Arten finns i två accepterade varianter, //Paph. malipoense// var. //malipoense// och //Paph. malipoense// var. //angustatum// Z.J.Liu & S.C.Chen (2002) som bara återfinns i Yunnan, Kina.
Namnet kommer från den kinesiska delstaten Malipo i provinsen Yunnan där arten först påträffades 1984. Taxonomiskt tillhör den undersläktet Parvisepalum. Kromosomtalet är 2n=26.

!Utseende
Den bildar fyra till sex långsmala blad marmorerade i ljust och mörkt grönt. Undersidan är täckt av små purpurfärgade prickar och försedd med en tydlig köl. Bladen kan bli tio till 20 cm långa och mellan två och sju cm breda. Under september till oktober börjar en blomstängel utvecklas men de låga temperaturerna under vintern gör att den mer än halvmetern lång stängeln inte är fullt utvecklad förrän i början av våren då den kan bära en eller mer sällan två, hallondoftande, upptill 13 cm stora blommor. Blomman är grön med purpurfärgade nerver på sepaler och petaler. Läppen är stor, ballongformad och helt ljusgrön.

!Skötsel
Även om det är en mycket anpassningsbar art är nyckeln till bästa blomningen är en ganska sval vintervilan. I sin naturliga miljö får den varma sommardagar med i genomsnitt 27 grader eller högre, hög luftfuktighet och mycket regn. Detta följs av en betydligt kallare och torrare vinter med nattemperaturer som kan sjunka ner till nollan. Den enda fukt som är tillgängliga under denna tid är i form av nattliga dimmor som bildas på kullarna och skogarna.
De bör ges en öppen, väldränerad kompost med medelgrov bark, perlite och leca eller grus. Trots att den växer på kalkstensklippor behöver den troligen inte något extra tillskott av kalk i komposten.
Under våren och sommaren bör de hållas ganska varmt, i ljus skugga utan direkt sol, i hög luftfuktighet och inte tillåtas torka ut helt mellan vattningarna. Under vintermånaderna bör den hållas på den kalla sidan och mycket torrare, låta plantan torka helt mellan vattningarna. Ge svag gödning ofta, en fjärdedel av den rekommenderade dosen.
Arten tar otroligt lång tid att utveckla sin blomställning och för blomman för att öppnas. I vissa fall kan det vara månader mellan den tidpunkt då knoppen syns till dess blomman är fullt utslagen. Var försiktig med temperaturförändringar under tiden då knopparna lätt vissnar och ramlar av.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphiopedilummalipoense.htm]] 2015-05-27
[[American Orchid Society|https://www.aos.org/Default.aspx?id=173]] 2015-05-27
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/parvisepalum/malipoense/index.html]] 2015-05-27
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-malipoense.html]] 2015-05-27
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_malipoense]] 2015-05-27
[[Ladyslipper|http://www.ladyslipper.com/0213-04.htm]] 2015-05-27












!Allmänt och utbredning
Denna svalväxande epifyt återfinns i kustnära molnskogar och längs inlandets bäckar och våtmarker i Brasilien, Argentina, Uruguay, Paraguay, Colombia, Ecuador och Peru mellan 1700 och 3000 meters höjd.
Namnet anspelar på den variabla blomman.

!Utseende
De upptill 20 cm stora, ljusgröna pseudobulberna är kraftigt tillplattade med djupa längsgående fåror. Från basen av bulben kommer flera par bladbärande höljen som mer eller mindre omsluter bulben. Från toppen av bulberna kommer två stycken, upptill 30 cm långa och fem cm breda, egentliga blad. Under hösten kan flera lila blomstänglar, som kan bli över metern lång, kommer från basen av en mogen bulb och grenar sig flera gånger där varje förgrening kan bära täta klasar med så många som 15 stycken, knappt två cm stora blommor. Blommorna är gula med bruna ränder och små, korta kronblad medan läppen är desto större, halvmånformig med en mycket smalare, röd, bas. En stor planta kan ha en svärm med hundratals gyllene små blommor i flera veckor som vajar för minsta vindpust.

!Skötsel
Den vill ha en sval växtplats i ljus skugga utan drag. Nattemperaturen kan gärna ligga runt tio grader. Sommartid trivs den utomordentligt utomhus, men klarar inte frost.
Håll den jämnt fuktig med hög luftfuktighet, låt den inte torka ut mellan vattningarna under tillväxten. Vintertid behöver den en sval, torrare period med så mycket ljus som går. Om den får för lite ljus blir de nya bulberna och blomstänglarna mindre och mindre.
Med sitt klättrande växtsätt och förkärlek att låta rötterna hänga fritt är det enklast att montera den på plattor av kork eller trädormbunke. I kruka behöver den en väldränerad barkkompost.

!Synonymer
__Homotypic Synonyms:__
//Oncidium flexuosum// Lindl. (1841) nom. illeg.
//Trigonochilum flexuosum// Königer & Schildh. (1994)
__Heterotypic Synonyms:__
//Oncidium hartwegii// Lindl. (1845)
//Oncidium cocciferum// Rchb.f. & Warsz. (1854)
//Oncidium trulla// Rchb.f. & Warsz. (1854)
//Oncidium micranthum// Skinner (1855)
//Oncidium hartwegii// var. //parviflorum// Rchb.f. (1870)
//Cyrtochilum cocciferum// Kraenzl. (1917)
//Cyrtochilum hartwegii// Kraenzl. (1917)
//Cyrtochilum trulla// Kraenzl. (1917)
//Cyrtochilum hartwegii// var. //parviflorum// Kraenzl. (1922)
//Trigonochilum cocciferum// Königer & Schildh. (1994)
//Trigonochilum trulla// Königer & Schildh. (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cyrtocflexuosum.htm]]















































































!Allmänt och utbredning
Arten växer på kalkstensklippor i det tjocka lager av lövmull som täcker de lägre sluttningarna av täta, fuktiga bergsmolnskogar på nordvästra Sumatra mellan 700 och 1600 meters höjd. Detta lager av sönderfallande vegetation kan vara nästan två meter tjocka, så växtens rötter när aldrig ner till marken och anses därför epifytiska, liksom de flesta inom släktet.
Namnet kommer efter den tyske taxonomen Dr. Guido J. Braem. Närbesläktad med, och anses av vissa som endast en mindre variant av, //[[Paph. tonsum|be73d7ef-1cc5-4905-8cde-e5fe06792f29]]//. Detaljerade studie har visat på tillräckligt skillnader för att den skulle få den förhöjda statusen som art. De båda arterna ingår som enda medlemmarna i sektionen Punctatum, Sigmatopetalum.

!Utseende
De tio cm långa bladen är ljusgröna med mönster i mörkare grönt. Den blommar under senvåren och sommaren på en upprätt, tätt behårad, mer än 20 cm lång stängel som bär en ensam blomma. Blomman, som kan hålla upptill tre månader, är i gröna, bruna och gula nyanser och är mindre med kortare, smalare, sepaler och petaler än de flesta andra inom släktet.

!Skötsel
Arten är relativt lätt att odla om plantan kan ges ljus skugga och intermediära till varma temperaturer. Odla den i en valdränerande kompostmix med medelgrov bark och perlit. Vattna regelbundet ungefär var fjärde till var femte dag. Det finns en kort torrperiod under vintermånaderna, så de flesta källorna rekommenderar en kort vila med mindre vatten och gödning under vintern för att inducera blomning.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum tonsum// var. //braemii// O.Gruss (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphbraemii.htm]]
[[Phils Orchid World|http://homepages.ihug.co.nz/~tomnz/paphframe/paph_punctatum.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_tonsum]]
[[ISSUU|http://issuu.com/bogrobotten/docs/paphiopedilum-8607/1]]









































































































!Allmänt och utbredning
//Gga. galeata// är en epifyt hemmahörande i Mexiko. De är sällan litofytiska eller terrestra där de växer i bergens molnskogar mellan 600 och 1800 meters höjd över havet.

!Utseende
De fårade pseudobulber som kan bli lite över fyra cm stora är ovalt pyramidformade. Från toppen av bulben kommer ett eller två blad som blir tre dm långa och fem cm breda.
Åtta till tio blommor kommer under tidig sommar på en hängande stängel som kan bli två dm lång. Blommorna är brungula och starkt doftande.

!Skötsel
Deras hängande blomstängel gör att den med fördel kan odlas i en hängande korg. De behöver en öppen, väldränerad kompost med mycket vitmossa i.
Under tillväxten behöver de en varm placering och ordentligt med vatten och gödning. Eftersom de inte har någon viloperiod utan fortsätter att växa hela året, får komposten inte torka ut helt. Dock kan vattningen minskas något under vintern, och gödningen uteslutas helt under den svala perioden. Bulberna kan lätt delas under våren för att förmera plantan.

!Synonymer
__Homotypic Synonyms__
//Maxillaria galeata// Lindley (1831)
__Heterotypic Synonyms__
//Acropera loddigesii// Lindley (1833)
//Acropera luteola// Drapiez (1840)
//Acropera atropurpurea// Heynh. (1846)
//Acropera fuscata// Heynh (1846)
//Acropera luteola// Heynh. (1846)
//Acropera pallida// Heynh. (1846)
//Acropera purpurea// Heynh. (1846)
//Acropera sulphurea// Heynh. (1846)
//Acropera flavida// Klotzsch (1851)
//Acropera citrina// Rchb.f. (1854)
//Gongora galeata// var. //loddigesii// Autran & T.Durand (1896)
//Gongora fuscata// Gentil (1907)
//Gongora galeata// f. //luteola// O.Gruss & M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/gongoragaleata.htm]]
[[Plant of the Week|http://www.plantoftheweek.org/week312.shtml]]
[[Orchidés en Nord|http://www.orchid-nord.com/g_page/Gongora_galeata/gong_gal.htm]] bild
[[Kulturberichten|http://www.kulturberichte.de/orchideenkulturen/Gongora/E_Gongora.htm]]

























































































































































































!Allmänt och utbredning
Den växer epifytiska i fuktiga molnskogar nära rinnande vatten i bergsområden i Malaysia, Sumatra, Borneo och Java mellan 1150 och 2100 meters höjd.
Namnet kommer från det latinska ''tomentosus, a, um'', "hårig", som anspelar på den håriga frökapseln. In handeln påträffas den fortfarande ofta under namnet //Coel. massangeana//. Taxonomiskt tillhör den sektionen Tomentosae.

!Utseende
Den bilda ett krypande rhizom från vilken det kommer ovalt långsmala, fem till tio cm långa och tre cm tjocka, böjda, nästan bananformade, pseudobulber. När bulberna åldras gulnar de och skrumpnar lätt. De kan bilda mycket stora klungor och vissa plantor i naturen beräknas väga närmare ett ton! Från toppen av bulben kommer ett eller två spetsigt avlånga blad på ett sju till åtta cm långt bladskaft. De läderartade bladen blir mellan 20 och 50 cm långa och tre till åtta cm breda. När som helst under året men företrädesvis under sommaren bildas en upptill 60 cm lång, hängande, blomstängel från basen av en nybildad bulb. Stängeln kan bära mer än 30 stycken samtidigt öppna, starkt grandoftande blommor. De drygt sex cm stora blommorna är ljusgula och läppen som är bruna med ljusare nerver har tre vågiga, gula längsgående lameller. Blommorna håller vanligen 12 till 15 dagar.

!Skötsel
Den är väldigt härdig och klara en sommar utomhus så länge temperaturen inte sjunker under för lågt, gärna inte under 16 grader. Helt torra under vintern kan de överleva ner till nollan under en kortare tid, men helst inte under tolv grader. De växer intermediärt eller varmt i en ljus halvskugga, runt 25000 lux, är det för mörkt kommer den inte att blomma. Plantera helst i hängande korgar så blomstänglarna kommer till sin rätt. Använd en väldränerad mix av medelgrov barkkompost. Vattna regelbundet under tillväxten och minska gradvis under senhösten till högst en gång i veckan under en eller ett par månader under vintern.
Det går lätt att dela i flera plantor så länge varje delning får minst tre bulber. Den är lättodlad och mycket lämplig för nybörjare.

!Synonymer
__Homotypic Synonyms:__
//Pleione tomentosa// Kuntze (1891)
__Heterotypic Synonyms:__
//Coelogyne massangeana// Rchb.f. (1878)
//Pleione massangeana// Kuntze (1891)
//Coelogyne densiflora// Ridl. (1903)
//Coelogyne dayana// var. //massangeana// Ridl. (1907)
//Coelogyne cymbidioides// Ridl. (1908) nom. illeg.
//Coelogyne tomentosa// var. //cymbidioides// Ridl. (1924)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelotomentosa.htm]] 2015-09-10
[[Coelogynes|http://coelogynes.com/Species%20Coel%20tomentosa.html]] 2015-09-10
[[Orchids Wiki|http://orchids.wikia.com/wiki/Coelogyne_tomentosa]] 2015-09-10
[[Dr. Giuseppe Mazza|http://www.photomazza.com/?Coelogyne-tomentosa&lang=en]] 2015-09-10
































!Allmänt och utbredning
Det finns <$view field="count"/> arter av detta terrestriska släkte från Indonesien. De växer i halvskugga till djup skugga från 100 till 800 meters höjd i låglandsregnskogar i den malaysiska övärlden och området till Nya Guinea och Vanuatu. Tillsammans med //[[Anoectochilus|061a1fa9-aa2c-4704-9c4e-7a381a780b3a]]//, //[[Goodyera|5f2b3868-8cd9-4356-b1f2-5311487d5cb2]]// och //[[Ludisia|2e46103f-39e7-4868-8aff-aa60b62d1df6]]// ingår de i en grupp som kallas "Juvelorkidéer". //Macodes// innehåller förmodligen de största och mest attraktiva plantorna inom den gruppen. De är nära besläktat med //[[Ludisia|2e46103f-39e7-4868-8aff-aa60b62d1df6]]// men blommorna är inte vända upp-och-ner som de är hos dessa.
Namnet kommer från grekiskans ''macro'' som betyder "lång", efter den långa läppen. 

!Utseende
De odlas mer för sitt praktfulla och färggranna bladverk än för sina oansenliga blommor. Plantorna är vanligen små och har ett krypande rhizom som brer ut sig med korta upprätta stammar. Stammarna bär en rosett med kortskaftade blad som riktigt lyser av olika klara nyanser i mörkt grönt och med nerver i lysande gult. I toppen av stammen kommer också en upprätt blomstängel som bär otaliga små blommor.

!Skötsel
Odlingsvillkoren är liknande de för //[[Ludisia|2e46103f-39e7-4868-8aff-aa60b62d1df6]]// och //[[Anoectochilus|061a1fa9-aa2c-4704-9c4e-7a381a780b3a]]//. I naturen växer de i fuktig halvskugga till djup skugga i en luftig lövkompost eller i mossa på skuggiga klippor. Plantorna bör därför odlas i en väldränerade kompost i grunda terrakotta krukor eller fat, med ett medium som hålls fuktig men inte blöt. Krukan kan gärna stå i ett fat med grus som hålls fuktigt, utan att vattnet når upp till krukan.
Efter blomningen bör plantan få en lite torrare viloperiod tills den nya tillväxten kommer. Under vår och sommar producerar plantan sidoskott både över och under marken. De kan lätt förökas med sticklingar som placeras i ett glas med vatten, och kommer snart att bilda rötter.
Det bör betonas att de i naturen växer skuggigt nära strömmande vatten i täta regnskogsområden, och för en lyckad odling bör dessa förhållanden kopieras så nära som möjligt. Undvik en placering i varm sol.

!Taxonomi
''Underfamilj'': Spiranthoideae
''Tribus'': Cranichideae
''Undertribus'': Goodyerinae

''Typart''
//[[Mac. petola|24703f17-dfde-4280-9753-0c840e5de48e]]// Lindley (1840)

''Uttal''
MAK-oh-deez

''Synonymer''
__Heterotypic Synonyms:__
//Argyrorchis// Blume (1859)
//Psudomacodes// Rolfe (1892)

!Rekommenderad läsning
[[Papua New Guinea Orchid News|http://www.orchidspng.com/Macodes.html]]
[[OrchidsOnline|http://www.orchidauction.biz/interactive/node/549?PHPSESSID=878d4258af1ef8d21b756f5f1002d115]]
[[Gflora|http://www.gflora.com/index.php?cmd=genus_body&genus_id=191]]


































!Allmänt och utbredning
Arten har nyligen flyttats från cattleyasläktet. Den frodas epifytiskt eller litofytiskt i fuktiga skogar från Mexiko till Costa Rica från havsnivå till 1200 meter över havet, men den har påträffats så högt upp som 2300 meter där regnet är ymnigare och avdunstningen mindre.
Sitt artnamn har den fått efter den engelske orkidéinsamlaren G.U.Skinner som var verksam i Costa Rica på 1800-talet och var den förste att hitta arten 1838. Växten är så vanligt förekommande och populär att den blivit Costa Ricas nationalblomma, där den också kallas ''Guaria Morada'', i Guatemala kallas den ''Flor de San Sebastian'', "San Sebastians blomma". I den ärevärdiga tidskriften ''The Orchid Review'' berättas att även om den lavendelfärgade typen introducerades av G.U.Skinner 1838, var det först 1870 som Mr Benedict Roezl hittade albaformen. Han var på väg tillbaka från en uppsamlingsresa i Guatemala, när han blev attackerad av ett gäng laglösa. De släppte honom till slut från sin fångenskap, tillsammans med en lokal präst som också hade blivit tillfångatagen av dem. De två män gick tillbaka till prästens byn, där Roezl märkt en stor planta med många snövita blommor på taket av kyrkan. Det är fortfarande sed att de lokala invånarna planterar några särskilt vackra blommor på takpannorna av kyrktaket, vilket gör plantorna ännu mer speciell, även helig. Roezl förstod att inga pengar i världen skulle medföra att plantan skulle komma i hans ägo. Men han ville ha San Sebastians vita blomma - vad göra? Sedan började han uppmärksamma vad hans värd, prästen, hade pratat om hela kvällen: han hade varit på en tuppfäktning, där alla sex av bybornas mästartuppar hade besegrats och dödats, vilket var en ganska förödmjukande sak för hela byn. Roezl föreslog att han - möjligen - skulle kunna hjälpa dem att förbättra sina chanser att vinna. Om byns tupp skulle vinna nästa tuppfäktning, skulle han, som sin enda belöning, be om den vita blommande växten på kyrkans tak. Indianerna accepterade Roezl utmaning - trots allt - att vinna en tuppfäktning är viktigare än en vacker växt! Så Mr Benedict Roezl tog sitt pris tillbaka till England, där han sålde den första //Gur. skinneri// var. //alba// till en Mr George Hardy från Manchester för summan av 2.800 Guineas.
//Gur. skinneri// blev under en period så sällsynt i sin naturliga miljö i hela Centralamerika att den kom i på C.I.T.E.S. bilaga I och var så ovanligt för en tid, att varje samlare bara var tvungen att ha en eller flera varianter! Den drevs upp i stor utsträckning, återinfördes till det vilda och är nu borttagen från bilaga I.
Kromosomtalet är 2n=40.

!Utseende
Den får två elliptiska, hårda, läderartade blad från toppen av de klubbformade pseudobulberna som kan bli en halvmeter höga.
Plantan blommar från bruna eller gröna bladskidor som bildats sommaren innan. Så fort en bulb har växt klart kommer blomskidan att torka och bli brun, knoppen utvecklas och den korta stängeln kommer fram under mars till april. Den decimeterlånga blomstängeln blommar med upptill 15 blommor fram till våren. De decimeterstora, svagt doftande blommorna öppnas inte alla på en gång, utan successivt. Varje blomma kan blomma tre till fyra veckor, längre om plantan hålls svalt.
Den har ett begränsat färgregister, med sepaler och petaler i huvudsak olika nyanser av lavendel eller rosa. Läppen är mörkare lavendelfärgad och med ett vitt gap. Det finns dock semialba och alba varianter som är riktigt spektakulära. De har en gnistrande, nästan kristallin textur som ger blomman ett skimmer.

!Skötsel
De föredrar att monteras och växa ljust i intermediära till varma förhållanden om luftcirkulationen är tillräcklig. De kan också odlas i små krukor eller korgar med en riktigt grov, genomsläpplig kompost som tillåter rötterna att torka upp snabbt. Stora krukor brukar hålla kvar fukten alltför mycket.
Nattemperaturen året runt kan hållas mellan 15 och 18 grader, och under dagen upp till 25 grader. Ge den svag gödning med halv till en fjärdedel av rekommenderad dos. Efter blomningen föredrar de en ljus, torr vintervila under ett par månader. Den behöver inte svalare förhållanden under vilan, utan bara torrare.
Arten är lättare att odla än många av sina nära släktingar cattleyorna. Den börjar skicka ut nya skott under sensommaren som mogna under senhösten eller tidig vinter. Om den uppmuntras med täta, lätta duschar under senare delen av juni, kan den fås att börja växa tidigare och hinna med två tillväxtperioder per år, och blomma på båda.
Plantera om den omedelbart efter att den slutat blomma. Det gör inget om plantan uppvisar gulgröna blad och om gamla bulber skrumpnar, det är naturligt.

!Synonymer
__Homotypic Synonyms:__
//Cattleya skinneri// Bateman (1838)
__Heterotypic Synonyms__
//Cattleya laelioides// Lemaire (1852)
//Cattleya deckeri// Klotzsch (1855)
//Epidendrum huegelianum// Rchb.f. (1861)
//Cattleya skinneri// var. //alba// Rchb.f. (1877)
//Cattleya skinneri// f. //alba// Schlechter (1914)
//Guarianthe deckeri// Roeth (2006)
//Guarianthe skinneri// f. //alba// Christenson (2011)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/catleyaskinnerii.htm]]
[[Chadwick and Sons Orchids|http://www.chadwickorchids.com/Cattleya/skinneri.htm]]
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS235.html]]
[[Costa Rica|http://www.costarica.com/Home/Culture/National_Symbols/National_Flower]]
[[The Canadian Orchid Congress|http://www.canadianorchidcongress.ca/Ingrid/C-skinneri.html]]
















!Allmänt och utbredning
Släktet //Cyrtochilum// innehåller <$view field="count"/> accepterade arter och en naturhybrid, //Cyr. x monacranthum//, mellan //[[Cyr. geniculatum|4969035c-a2cd-42db-b2aa-5977589108c6]]// och //[[Cyr. macranthum|239e3f3e-c9d0-4062-8c10-b2526c6acae8]]//. De är mestadels terrestriska arter som växer högt upp i den sydamerikansak bergskedjan Anderna från Venezuela, Colombia och söderut till Ecuador och Peru.
De flesta arterna kommer från släktet //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]// när det omklassificerades. //Cyrtochilum// fortsätter att växa snabbt då nya områden som tidigare ansetts alltför farliga blir tillgängliga för botaniker.
Namnet, som förkortas Cyr., kommer från grekiskans ''kyrtos'' som betyder "böjd" och ''cheilos'' som betyder "läpp".

!Utseende
//Cyrtochilum// skiljer sig från //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]// genom de extremt långa blomstänglarna som kan bli över en halvmeter långa, böjda petaler som resulterar i en trekantig blomma och det klättrande växtsättet med pseudobulber som kommer ovanpå varandra.

!Skötsel
Odla dem svalt och fuktigt.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Oncidiinae

''Typart''
//[[Cyr. undulatum|be8faad3-8fff-4328-87b9-03a2f7c0d47b]]// Kunth (1816)

''Uttal''
sir-toh-KY-lum

''Synonymer''
__Heterotypic Synonyms:__
//Neodryas// Rchb.f. (1852)
//Rusbyella// Rolfe (1896)
//Buesiella// C.Schweinf. (1952)
//Dasyglossum// Königer & Schildh. (1994)
//Trigonochilum// Königer & Schildh. (1994)
//Irenea// Szlach., Mytnik, Górniak & Romowicz(2006)
//Siederella// Szlach., Mytnik, Górniak & Romowicz (2006)
//Vierlingia// Königer (2010)

!Rekommenderad läsning

























































































!Allmänt och utbredning
Denna miniatyr art återfinns epifytiskt i Ecuadors svala molnskogar mellan 2800 och 3300 meters höjd.
Den är mycket lik //[[Lths. capitana|f9b16bc3-72be-4e33-826e-ee79d9ec80d7]]// som dock är knappt hälften så stor. Namnet anspelar på dess "eleganta" utseende. Taxonomiskt tillhör den sektion Lepanthes undersektion Lepanthes serie Elongatae.

!Utseende
Med sina sex cm är det en av de största inom ett släkte av miniatyrer. Den saknar pseudobulber utan från en underjordisk stam kommer blomstängeln som bär ett ensamt, kilformat blad. Blomstängeln kommer från basen av bladet där den möter blomstängeln. Den kan komma när som helst under året och blir fem till sex cm lång. Blommorna kommer en eller två åt gången, successivt under hela året. Blommorna är nästan 2 cm stora, mycket stort för en //[[Lepanthes|6e2dbc92-a005-4b5f-8aee-4b5c983e5247]]//, och har en mörkt purpurröd färg.

!Skötsel
Ge den hög luftfuktighet, god luftcirkulation och sval eller intermediär temperatur i ljus halvskugga. Odla i fin barkkompost med perlit eller vitmossa. Vattna regelbundet och hålla den jämnt fuktig.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lepelegantula.htm]] 2015-09-02
[[Orchids Wiki|http://orchids.wikia.com/wiki/Lepanthes_elegantula]] 2015-09-02
















































!Allmänt och utbredning
Arten växer epifytiskt i djup skugga på väst- eller nordvästsidor av isolerade och otillgängliga bergstoppar mellan 1200 och 2000 meters höjd i den indiska provinsen Assam, Myanmar/Burma, Thailand och provinsen Yunnan i sydvästra Kina.
Den liknar //[[Paph. spicerianum|e1ed1ff1-531e-40fe-b324-008325228bbf]]// och de två arterna påträffas ofta på samma platser. Arten upptäcktes av den brittiske officeren R. Moore 1893 och var tillsammans med //[[Paph. spicerianum|e1ed1ff1-531e-40fe-b324-008325228bbf]]// en särskilt populära art under första delen av 1900-talet och de stora orkidéföretagen Veitch och Sander importerade tusentals. Båda arterna anses idag sällsynta i naturen.
Namnet kommer efter den engelska orkidéodlaren Joseph Charlesworth, ägare till plantskolan Charlesworth, Shuttleworth & Co, som introducerade arten i Europa.
Kromosomtalet är 2n=26. Den är en medlem av sektionen Paphiopedilum.

!Utseende
Det är en kompakt planta med kraftiga rötter som får fyra till sex stycken upptill 15 cm långa och tre cm breda, klargröna blad med purpurfärgade prickar på undersidan mot basen. Under sensommaren och hösten kommer en upptill 15 cm lång, hårig blomstängel som bär en ensam blomma. De hållbara, upptill åtta cm stora, ljusgröna blommorna har rödbruna prickar och kan blomma i ett par månader om den hålls svalt och skuggigt. Den är känd för sin stora, nästan runda, dorsala sepal som blir upp till 6 cm bred, ljust rosa överdragen med mörkröda nerver. Petalerna är grönbruna med gröna nerver och läppen har brunalila toner med en stor och klart lysande vit staminoid.

!Skötsel
De växer i naturen i hög luftfuktighet och svala eller intermediära temperaturer i djup skugga, epifytiskt eller i humus och halvt nedbruten lövkompost på kalkstensklippor. Under vinter och vår får regionen bara duggregn och dimma. Sommar och höst utsätts de konstant för kraftiga regn.
Under perioden av aktiv tillväxt bör de gödslas varje eller varannan vecka med en fjärdedel eller halva den rekommenderade dosen. Många odlare rekommenderar en gödning med högre andel kväve, till exempel 30-10-10, om plantorna planteras i barkkompost. Under hösten rekommenderas en gödning med mindre kväve och mer fosfor för att stimulerar plantan att blomma nästa säsong. För att undvika ansamling av salter är det lämpligt att spola genom komposten med några veckors mellanrum. Det är särskilt viktigt när de vattnas med hårt vatten.
Den växer bäst i en liten kruka med väldränerad kompostmix av fin eller medelgrov bark och perlite eller sphagnum. Vid plantering, placera plantan minst två cm under kanten på krukan och en cm under ytan av substratet.
För att inducera blomning bör temperaturen minskas till cirka tolv grader under nätterna vintertid och vattning bör begränsas under minst två månader med bara en vattning varannan vecka. Under tillväxtsäsongen bör plantan hållas fuktig, men inte blöt.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium charlesworthii// Rolfe (1893)
//Cordula charlesworthii// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium crawshayae// O'Brien (1898)
//Paphiopedilum charlesworthii// f. //sandowiae// Braem (1998)
//Paphiopedilum charlesworthii// f. //crawshayae// O.Gruss (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphcharlesworthii.htm]] 2015-04-16
[[SlipperOrchids.info|http://slipperorchids.info/paphdatasheets/paphiopedilum/charlesworthii/index.html]] 2015-04-16
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_charlesworthii]] 2015-04-16
[[Orchids Australia|http://www.orchidsaustralia.com/Paph_charlesworthii.htm]] 2015-04-16
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092419]] 2015-04-16

























































!Allmänt och utbredning
//Paph. victoria-regina// [paf-ee-oh-PED-ih-lum vik-TOR-ee-a REE-jin-a] är en medelstor epifytisk eller litofytisk art endemisk för regnskogen på vulkanen Guanong Marapi, västra Sumatra, där den växer på västvända mossiga kalkstensklippor nära rinnande vatten mellan 790 och 1600 meters höjd. den är väldigt sällsynt i naturen, känd från bara en lokal med mindre än 50 vuxna individer inom ett fyra km^^2^^ stort område.
Den är uppkallad för att hedra den brittiska drottning Victoria som var mycket attraherad av släktet //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]//. Taxonomiskt tillhör den undersläkte Cochlopetalum. Kromosomtalet är 2n=32.

!Utseende
Den bildar en rosett med fyra till sex stora, ovalt avlånga blad, upptill 30 cm långa och nio till elva cm breda, helgröna eller bara lätt mönstrade i grönt och mörkare grönt. Undersidan kan mot basen vara täckt med purpurfärgade prickar. Under våren kommer en upprätt eller hängande, upptill 60 cm lång, blomstängel. Den bildar flera blommor i succession med aldrig fler än två öppna samtidigt under upptill tre veckor. En stängel på en välväxt planta kan producera mer än 30 blommor under två års tid. Blommorna liknar de hos //[[Paph. victoria-mariae|2ac82db0-cd5e-46f8-94cd-0789130749d4]]// men har sex utmärkande rosa till rödbruna ränder på den dorsala petalen. Petalernas kanter på de åtta cm stora blommorna blir väldigt vågiga, ljust gröna med små rödbruna fläckar. Den dorsala sepalen är limegrön med en ljusare kant och sex tydliga rosa till rödbruna ränder. Läppen är rosa till rosaröd med en gulaktig eller ljust gulgrön kant.

!Skötsel
I dess naturliga utbredningsområde utsätts den för lätta regn under sommaren och hösten, och kraftiga skyfall från vinter till vår. Våren är den varmaste säsongen.
Ge den en växtplats med måttligt starkt ljus och intermediära till varma temperaturer, inte lägre än 15 grader under vintern. Odla i en väldränerad mix av medelgrov barkkompost och perlit, gärna med tillsats av kalk. Vattna regelbundet ungefär var fjärde till till var femte dag, håll komposten fuktig men inte blöt. För att inducera blomningen behövs en kort period under hösten med minskad vattning.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium victoria-regina// Sander (1892)
__Heterotypic Synonyms:__
//Cypripedium chamberlainianum// O'Brien (1892)
//Paphiopedilum chamberlainianum// Stein (1892)
//Paphiopedilum chamberlainianum// var. //latifolium// Schltr. (1911)
//Cordula chamberlainiana// Rolfe (1912)
//Paphiopedilum victoria-regina// subsp. //chamberlainianum// M.W.Wood (1976)
//Paphiopedilum kalinae// Braem (1995)
//Paphiopedilum victoria-regina// var. //kalinae// Koop. (1995)
//Paphiopedilum victoria-regina// var. //latifolium// Beckner (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphvictoriaregine.htm]] 2015-09-07
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_victoria-regina]] 2015-09-07

























































































!Allmänt och utbredning
Släktet //Laelia// omfattar 164 artnamn. Av dessa är numera endast <$view field="count"/> stycken accepterade som arter plus en naturhybrid inom släktet, resten är synonymer för dessa arter. Ytterligare ett åttiotal artnamn hänvisar till arter som numera finns i andra släkten. Ett turbulent släkte med andra ord.
De växer i de subtropiska och tempererade delarna av Centralamerika men huvudsakligen i Mexiko. //[[L. speciosa|139658d0-78c7-4659-8d94-608637eea07d]]// växer under soliga, torra och svala förhållanden på hög höjd, men de flesta växer i regnskogar med varma, fuktiga somrar och svala, torra vintrar. De är framförallt epifytiska men det finns även några få litofytiska, som till exempel //[[L. anceps|31859c9b-717d-44c8-9c7b-d61c5b6478b2]]//. De "brasilianska //Laelias//" som under flera år klassificeras som //Sophronitis// har nu placerats i släktet //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]// för att undvika förvirring. Flera arter av det nu nedlagda släktet //Schomburgkia// har lagts till släktet //Laelia//. 
Det är ett av de viktigaste och mest omtyckta släktena på grund av sin skönhet och sin enkelhet att odla. Plus att //Laelia//-arter lätt bildar hybrider inom släktet samt med andra släkten, inklusive //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, //[[Brassavola|b098846e-ad91-4f83-b2e6-9fdbdc0cf091]]// och //[[Rhyncholaelia|c81465bb-fcec-48a2-a8ea-92562ed6dc7f]]//.
Namnet kommer antagligen från Laelia, en av prästinnorna för godhetens gudinnan Vesta i romersk mytologi. Det eller från de kvinnliga medlemmarna i den högättade romerska familjen Laelius. Historikerna tvistar.

!Utseende
Stammar är vanligtvis korta, men stammen av //[[L. anceps|31859c9b-717d-44c8-9c7b-d61c5b6478b2]]// kan vara mer än en meter lång. De ovala pseudobulber är sex till 30 cm långa och klart åtskilda på rhizomet. En eller två vaxartade, läderartade blad utvecklas från varje pseudobulb. Detta blad kan vara upp till 20 cm långt. Blomklasen, som kan vara 30 cm lång, med upp till åtta blommor, växer från toppen av pseudobulb. Blommorna kan vara rosa till lila, med en vackert färgad lila läpp som bli vit mot könspelaren. De är nära besläktade med //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, men med dubbelt så många polliner. De blommar på våren eller hösten.

!Skötsel
Medlemmarna av detta släkte tenderar att vara ganska lättskötta under förutsättning att de får en sval, torr viloperiod under vintermånaderna, och växterna är förvånansvärt torktåliga. Vatten är mycket skadligt under dvalan och förhindra blomningen, och i många fall förlorar växten sina rötter och tyna bort. Dessa växter kräver mycket höga ljusnivåer under året för att blomma och ganska måttlig luftfuktighet. Blommorna som hos  många arter är slående och med klara färger, är normalt kortlivade, varar sällan längre än tio till 15 dagar, och produceras på en kort till mycket lång, sträv blomstängel med få eller enstaka blommor, och växterna blommar vanligtvis bara en gång om året.
Odlingen är mycket beroende av den naturliga livsmiljön för arten i fråga, även om många växer bra monterade så att rötterna får massor av luftcirkulation och en distinkt våt och torr cykel. De flesta av arterna kommer från områden med perioder utan nederbörd där luftfuktigheten, som vanligtvis är hög hela året, är allt plantorna har tillgång till. Vissa arter blommar inte alls om de vattnas under vilomånaderna december till april, framförallt //[[L. speciosa|139658d0-78c7-4659-8d94-608637eea07d]]// kan vara besvärlig. Rötterna till dessa orkidéer är fotosyntetiserande och känsliga för skador eller störningar. Skadade rötter dör tillbaka till rhizomet. De behåller sina äldre rötter endast en begränsad tid och bildar hela tiden nya som ersätter de gamla döende rötterna, även om rötterna har en vedartad kärna som fortsätter att förankra och stödja plantan även efter att rötterna torkat ihop och dött. De behöver mycket gödning när de är i aktiv tillväxt.
De flesta av dessa arter klättrar gärna ut ur sin kruka och odlas därför bäst monterad på stycken av trädormbunke eller barkskivor av kork, och fortplantas lätt från utlöpare. Några av de större arterna kan odlas i stora, breda och djupa lerkrukor med ett lager av finkompost på botten av krukan med barkkomposten som ett lager ovanpå, cirka 50/50, och de växter på barkytan. De flesta av dessa arter producerar mycket rötter och några arter kan snabbt växa till stora plantor, medan andra är små epifyter som bäst odlas monterade. Växterna är intoleranta mot rotstörningar och en omplantering kan få dem att sura för en säsong eller mer, och de bör endast störas när plantan är på väg ut ur sin kruka. Många arter kan  växa ur sina krukor och fortsätta att försörja sig ganska bra med massor av luftrötter under flera säsonger utan att behöva omplanteras.
Plantorna kan klara lätt frost utan några större skador, men inte många grader under nollan.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//Bletia grandiflora// Lex.(1825) = //[[L. speciosa|139658d0-78c7-4659-8d94-608637eea07d]]// Schltr. (1914)

''Uttal''
LAY-lee-uh

''Synonymer''
__Heterotypic Synonyms:__
//Schomburgkia// Lindl. (1838)
//Amalia// Rchb. (1841)
//Amalias// Hoffmanns. (1842)

!Rekommenderad läsning
[[Orchid Societies Council of Victoria INC|http://www.oscov.asn.au/articles/laelia2.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Laelia]]
[[About.com|http://houseplants.about.com/od/orchids/p/Laelia-Orchids-Growing-Laelia-Orchids.htm]]





















































































































!Allmänt och utbredning
De växer epifytiskt i fuktiga regnskogar och torra höglandsskogar mellan 200 och 1000 meters höjd över havet i Panama, Ecuador, Colombia och Costa Rica.
Släktet skapades redan 1838 av Rafinesque men det är först nyligen som man återanvänt släktet genom att de <$view field="count"/> arterna som utgör släktet flyttades från //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]//. Internetsidan [[orchidoman.net|http://www.orchidoman.net/PSYCHOPSISkey.html]] har en nyckel till de olika arterna.
Släktnamnet kommer från de grekiska orden ''psyche'' som betyder "fjäril" och ''opi'' som betyder "-liknande", alltså fjärilsliknande, något de verkligen är.

!Utseende
Släktet karaktäriseras av ett ensamt blad från toppen av en nästan rund pseudobulb vars bas är mer eller mindre omgivet av en tunn bladskida. Bladen har en rostfärgade bakgrund med gröna mönster och kan bli upp till 30 cm långa. Från basen av bulben kommer också den långa, uppräta blomstängeln som bär enstaka blommor i succession under många månader och till och med år. Blomman liknar en stor fjäril med läppen som en färggrann kropp, långa antennliknande petaler och stora vingliknande, gula laterala sepaler med fläckar i olika bruna nyanser. De har en sporrlös läpp, fotlös könspelare och två hårda polliner. Blommorna kan komma nästan när som helst på året. När det nya skottet är tillräckligt stor kommer den att skjuta ut nya stänglar. Dessa kan bli över halvmetern långa och blomma kontinuerligt under många år. Blommorna kommer en i taget under hela året och håller i flera veckor. När de fallit kommer snart en ny knopp alldeles nära där den gamla suttit. Det är inte ovanligt att stora exemplar har ett dussintal stänglar som blommar till och från under hela året. Klipp inte bort en stängel förrän den blivit helt brun och torr.

!Skötsel
Dessa plantor behöver bra luftcirkulation och ljusförhållanden ungefär som //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// men kan odlas i skuggigare förhållanden. Under ljusare förhållanden tenderar blommorna att bli mindre och få mindre skarpa färger. Om plantan är stor och inte går i blom så kan mer ljus initiera blomstänglar. De är intermediära till varmväxande, under vintern inte under 15 grader nattetid och inte över 25 grader dagtid. Under sommarens tillväxtperiod kan de klara några grader varmare. Vattna med rent vatten med lite kalcium tillsatt. Dessa plantor verkar kräva relativt stora mängder kalcium som de antagligen får från träden de växer på i naturen. De har ett tunt rotsystem som behöver torka upp lite mellan varje vattning. Rötterna ruttnar lätt om de hålls för fuktiga. Stora plantor trivs bra i lerkrukor. I naturen har de en viloperiod som sammanfaller med norra halvklotets vinter. Vattna och göd mer sällan under denna period. 
De behöver en genomsläpplig kompost med mycket luft. Byt komposten endast när den börjar brytas ner, de tycker inte om att störas. Bästa tiden för omplantering är under våren eller när nya skott är på väg och kommer med nya rötter.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//Psychp. picta// Raf. (1838) synonym till //[[Psychp. papilio|be6f4a2e-81fe-4926-93cc-8c6295b9f919]]// H.G.Jones (1975)

''Uttal''
sye-COP-siss

''Synonymer''
__Heterotypic synonym:__
//Papiliopsis// E.Morren (1874)
//Papiliopsis// E.Morren (1874)
//Psychopsiella// Lückel & Braem (1982)

!Rekommenderad läsning
[[Most beautiful orchids|http://mostbeautifulorchids.blogspot.com/2011/12/psychopsis.html#.TxDHiJjAqJA]]
[[Jardim Therapy|http://jardimtherapy.com/genus-species/psychopsis/]]


















































!Allmänt och utbredning
//Mexipedium// är ett monofyletiskt släkte, det består endast av en art, //[[Mxl. xerophyticum|2e148571-0329-4522-8773-c70c8ae6b88d]]//, endemisk för ett litet område i Mexiko. Det är en terrestrisk eller litofytisk orkidé som växer i sprickor på kalkstensklippor, skyddade från solen upptill 350 meters höjd över havet. 
Dess namn kommer från en latinsk böjning av ''Mexi'' som är en förkortning för Mexico på det aztekiska ursprungsspråket Nahuatl och det latinska ''pes'' som betyder "fot", med hänvisning till läppens form. Kromosomtalet är 2n=20, en av skillnaderna till de närbesläktade //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]// och //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]//. Det verkar vara en mellanform av släktena //[[Cypripedium|9f3a754f-f5e0-4254-a4e7-a48ca8788aef]]// och //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]//.

!Utseende
Det är en liten art som har en för underfamiljen ovanlig tillväxt i och med att den tenderar att spridas genom utlöpare, med fem till tio centimeters avstånd från moderplantan. Rötterna kommer från basen av det nya skottet, inte från rhizomet. Den bildar en rosett med fem till åtta blad, upptill tolv cm långa och en till tre cm breda. De köttiga, silvergröna bladen är små, stela och halv upprätta. När den 15 cm långa blomstängeln kommer under våren eller hösten kan den hos en välväxt planta bära upptill tio blommor per gren med en till fyra grenar per stängel. Blommorna är öppna en i taget under flera månader. De är runt två cm stora, varje blomma håller upptill två veckor, är vita till ljusrosa och har en sköldliknande, rosa staminoid och en toffel-formad läpp. De krökta petalerna är skärformade.

!Skötsel
Arten växer tillsammans med andra torktåliga arter som //Agave// och //Plumeria// under varma och fuktiga förhållanden i ljus skugga, runt 25000 lux, där den får uthärda perioder med kraftig torka. Som liten planta kräver den mindre ljus, ungefär som för paphiopedilumplantor. Men när den tillväxer kan den vänjas vid mera ljus, upptill 45000 lux, vilket ger större och kraftigare plantor. Den behöver jämn temperatur hela året, mellan 20 och 26 grader, under nätterna vintertid möjligen ett par grader kallare, och en nästan helt torr period från december till mars. Vattna varannan till var tredje dag under tillväxtens varma dagar och låt den bara torka upp lätt mellan vattningarna. Ge svag gödning varannan vecka. Vintertid kan det få gå längre mellan vattningarna men låt den inte torka ut helt.
Odla i grunda, vida krukor eller skålar med en väldränerad mix av fin eller medelgrov barkkompost och perlite, gärna med tillsats av krossad kalksten eller musselskal som toppdressing. Vid omplanteringen kan den lätt delas så länge utskottet börjat bilda egna rötter.

!Taxonomi
''Underfamilj'': Cypripedioideae ''Tribus'':  Mexipedieae ''Undertribus'': Mexipediinae

----
''Typart''
//[[Mxl. xerophyticum|2e148571-0329-4522-8773-c70c8ae6b88d]]//

----
''Uttal''
mex-ih-PEE-dee-um

----
''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|https://en.wikipedia.org/wiki/Mexipedium]] 2015-11-19
[[Ladyslipper|http://www.ladyslipper.com/mexipedium.htm]] 2015-11-19
[[Slipperorchids.info|http://slipperorchids.info/mexdatasheet/index.html]] 2015-11-19
[[OrchidsWiki|http://orchids.wikia.com/wiki/Mexipedium_xerophyticum]] 2015-11-19
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:126639]] 2015-11-19














































!Allmänt och utbredning
Den här varmväxande miniatyrarten är ganska vanlig inom sitt utbredningsområde i Thailand, Laos, Kambodja, Vietnam, Indien och Myanmar. Här växer den epifytiskt på skuggiga trädstammar utan mossväxt eller mer sällan litofytiskt mellan 20 och 800 meters höjd över havet. 
Det är en av de allra minsta orkidér inom bulbophyllumsläktet. Den blandas ofta ihop med //[[Bulb. minutissimum|7b1805fe-a8c4-40e8-8f0c-c51f7e17f698]]// som är mycket lik //Bulb. moniliforme//, men som behåller sina blad under blomningen.
Artepitetet som uttalas [mo-nil-i-FOR-mee], kommer av det latinska ''moniliformis'' som betyder "halsbandsformad" och anspelar förstås på bulbernas pärlliknande utseende.

!Utseende
De växer i täta kluster och kan täcka mindre områden helt. Den växer extremt långsamt och de fullväxta pseudobulberna lever bara två, tre år. Som mest skickar de ut två nya skott per mogen bulb per år, och vanligen högst fem rötter per bulb. Bulberna är mycket små, mindre än fem mm stora, runda, lätt rynkiga och ovanifrån tillplattade. De är glansigt gröna i färgen och endast de nya bulberna bär ett enda, näst intill mikroskopiskt blad som fälls på hösten när viloperioden ska börja. De millimeterstora, klarröda, blommorna kommer ensamma på en två cm lång blomstängel under oktober till november, efter att bladen fallit, "högt" över bulberna. Blommorna håller fem till tio dagar innan de vissnar. Sepalerna har fem eller sju nerver och petalerna en eller tre nerver.

!Skötsel
Odla den rumstempererat eller varmt och ganska ljust med en så hög luftfuktighet som möjligt. Försök ge den 15000 till 18000 lux och 14 till 24 grader. Blötlägg ett par minuter varje dag under sommaren och låt torka upp mellan vattningarna. De vill inte ha blöt om rötterna för länge då dessa lätt ruttnar, men ändå har den så små reserver att den behöver daglig tillförsel av fukt. Däremot tycker den inte om att bli direkt duschad, däremot runt omkring för att höja luftfuktigheten. I sitt naturliga habitat kommer under vinterperioden den mesta fukten från nätternas dagg. Göd två gånger i månaden eller mycket svagt varje vattning.
Den kan med fördel odlas monterad på trädormbunke, om den kan få sin dagliga vattning. Om den monterats, använd INTE mossa under den, det blir för blött. Ett annat alternativ är att använda en hög lerkruka fylld med vitmossa placerad på ett fat med vatten och bulberna ovanpå. Mossan hinner torka ut tillräckligt men inte för mycket för att plantan ska trivas. Speciellt under vinterperioden är den känslig för röta och behöver den en torrare, inte torr, vila, gärna kombinerad med en lägre ljusintensitet.

!Synonymer
__Homotypic Synonyms:__
//Phyllorkis moniliformis// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbmoniliforme.htm]]
[[PBase|http://www.pbase.com/glazemaker/image/91877097]] - foto
[[Butterfly & Orchids Photo Gallery|http://www.orchidfoto.com/thumbnails.php?album=8]]


!Allmänt och utbredning
Det är antagligen den största arten inom släktet, endemisk för Filippinerna, där den växer terrestriskt och epifytiskt vid basen av träd i full sol, från havsnivå upp till 1000 meters höjd.
Arten är döpt för att hedra den engelske orkidésamlaren James Storie som verkade i sydöstra Asien under 1700-talet.

!Utseende
Den har ett monopodialt växtsätt med en styv stam som kan bli närmare två meter hög. Längs med stammen kommer de smala, styva bladen utåt, uppåt. Från bladfästena kommer under sommaren de horisontala till hängande blomstänglarna. De vedartade stänglarna bildar vanligen två eller tre grenar som bär hundratals tigerrandiga blommor i en kaskad av gult, orange och rött. Blommorna blir sex cm stora med ett spindelaktigt utseende.

!Skötsel
Plantan odlas bäst hängd i korgar eller monterade och kräver fullt solljus och varma temperaturer, minimum är 16 grader. Om den odlas monterad måste den vattnas ofta. Plantor odlade i korgar behöver en kompostmix som är väldränerad, till exempel trädormbunke för små plantor, grov barkkompost och sphagnum för större plantor. Om de odlas i krukor måste det vara en mix som ger utmärkt dränering.
Stimulera luftrötter att bildas genom att duscha ofta. Under tillväxtperioden behöver de mycket vatten och svag gödning ofta. Vintertid behöver de mindre värme och fukt, men så mycket ljus som möjligt.
Allt eftersom nya blad och rötter bildas högre upp på stammen, blir den nedre delen kal. Skär av och plantera toppen för att förnya plantan.

!Synonymer
__Heterotypic Synonyms:__
//Vanda storiei// Storie (1880)
//Renanthera storiei// f. //citrina// Valmayor & D.Tiu (1983)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/renstoriei.htm]]
[[Orchids WIki|http://orchids.wikia.com/wiki/Renanthera_storiei]]
[[Sunny Gardens|http://www.sunnygardens.com/garden_plants/renanthera/renanthera_2466.php]]

!Allmänt och utbredning
//Phalaenopsis// förekommer i södra Asien, Indien, Malaysia, Filipinerna och norra Australien. De flesta av släktets <$view field="count"/> arter växer som epifyter, men ett fåtal är litofyter. De växer oftast på träd eller klippor nära vatten, nästan alltid i djup skugga.
Släktnamnet kommer från de grekiska orden ''phalaena'' som betyder "fjäril" eller "mal", och ''opsis'' som står för "likhet". Släktet kallas också ofta för fjärilsorkidé.

!Utseende
De är monopodiala med köttiga rötter och stora suckulenta blad med väldigt korta skaft. De blommar på korta blomstjälkar som kan bära hundratals blommor. En blomstängel är inte död förrän den är helt upptorkad. Väldigt ofta skjuter den nya skott på den gamla, färdigblommade, blomstängeln. Så skär inte av den innan den torkat helt. Blommorna är mycket hållbara, ibland i många månader.

!Skötsel
Phalaenopsisplantor vill stå i ett fönster där ljuset inte är för starkt och inte för varmt. Gärna i ett norr- eller östfönster, eller en bit in i rummet. Det är viktigt att det inte ligger direkt solljus på bladen under längre stunder, för då kan de brännas, med fula fläckar som resultat.
För att initiera blomningen, kan de behöva en nattemperatur ner till tio grader under hösten. De har inga bulber som kan lagra vatten, och därför är det viktigt att phalanopsisen inte torkar ut helt. Man bör låta en eller ett par liter vatten flöda genom krukan ordentligt. Tänk på att inte duscha på blommorna, för de kan få fula fläckar. Och låt inte vatten stå i bladvecket, då kan det ruttna.
De växer bäst i krukor med grov bark, eller i hängande korgar. En //Phalaenopsis// behöver inte planteras om mer än vartannat år, för den tycker om att stå lite trångt i krukan. Komposten ska vara luftig och samtidigt fukthållande. En blandning av mycket grov tallbark, lite vitmossa, äkta träkol (inte den vanliga grillkolen) och kanske lite grus är en bra kompostmix. Annars kan man köpa någon färdig kompostblandning, som håller vattnet bra och samtidigt är luftig.
Ibland händer det att växterna får småplantor som växer ut på blomstängeln. Dessa kallas för ''keikis'', vilket är hawaiianska för "barn". Dessa kan planteras för sig själva när de har fått fem rötter som blivit fem till sju cm. långa. Sedan sköts den precis som moderplantan.

!Taxonomi
''Underfamilj'': Vandoideae
''Tribus'': Vandeae
''Undertribus'': Aeridinae

''Typart''
//[[Phal. amabilis|a45d281a-1066-4f6f-8dfe-18ee46cc71bb]]// Blume (1825)

''Uttal''
fal-en-OP-sis

''Synonymer''
__Heterotypic Synonyms:__
//Polychilos// Breda (1827)
//Doritis// Lindley (1833)
//Synadena// Rafinesque (1838)
//Stauroglottis// Schauer (1843)
//Polystylus// Hasselt (1855)
//Stauritis// Rchb.f. (1862)
//Kingiella// Rolfe (1917)
//Grafia// Hawkes (1966)
//Kingidium// Hunt (1970)
//Lesliea// Seidenf. (1988)
//Grussia// M.Wolff (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phalenopsis.htm]]
[[Phalaenopsis Orchids|http://www.phals.net/index_e.html]]
[[Karls Orchids|http://www.karls-orchids.net/]]
[[Easy Orchids|http://www.easyorchids.co.uk/site/content/view/22/45/]]




















!Allmänt och utbredning
Den är endemisk för ett område i sydöstra delen den kinesiska provinsen Yunnan där den växer terrestriskt bland täta snår och höga gräs på kalkstensgrund mellan 800 och 1500 meters höjd. Den har en mycket begränsad utbredning och är känd från en enda lokal med mindre än 50 vuxna individer. Det spekuleras i om det är en naturligt förekommande hybrid av den människoskapade hybriden //Paph. Conco-bellatulum//, //[[Paph. concolor|e52e6d13-4a32-4f18-b6aa-29ff7f43bb6c]]// x //[[Paph. bellatulum|f0f4e936-5ba6-41ee-9615-76ff61c16251]]//.
Namnet kommer från det distrikt, Wen Shan Dou Lan, i provinsen Yunnan där den upptäcktes. Taxonomiskt tillhör den undersläkte Brachypetalum.

!Utseende
Den bildar en rosett med fyra till fem långsmala blad, fem till tio cm långa och tre till fem cm breda, mönstrade i mörkt och ljust grön. Under våren kommer en kort, bara två till fyra cm lång, blomstängel som bär en, två eller ibland till och med tre runda blommor. Blomman blir fem till sju cm stor, med vit eller ljusgul grund och den dorsala sepalen och pedalerna är sparsamt täcka med många mörklila prickar.

!Skötsel
Den vill ha en skuggig eller halvskuggig växtplats, mer ljus än de flesta andra inom släktet, med intermediär eller varm temperatur. Den vill ha en fuktig, väldränerad mix av medelgrov barkkompost och perlite.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum wenshanense// f. //album// O.Gruss & Petchl. (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphwenshanense.htm]] 2015-09-07
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092418]] 2015-09-07
[[e-Monocot|http://cypripedioideae.e-monocot.org/taxonomy/term/551/descriptions]] 2015-09-07













!Allmänt och utbredning
//Phrag. fischeri// [frag-muh-PEE-dee-um FISH-er-ee] är endemisk för norra Ecuador, nära gränsen till Colombia, där den återfinns terrestriskt nära rinnande vatten i fuktiga molnskogar mellan 1000 och 1500 meters höjd. Den upptäcktes 1996 i en grupp [[Phrag. schlimii|5b712237-dcf2-4c47-896e-1d1711099790]] importerade från Ecuador.
Arten är uppkallad efter den amerikanske orkidéentusiasten Jerry Lee Fischer, ägare till växtföretaget ''Orchids Limited'' i Plymouth, Minnesota. Taxonomiskt tillhör den selektionen Micropetalum. Kromosomtalet är 2n=36.

!Utseende
Det är en liten, kompakt art som bildar rosetter med upptill 20 cm långa och tre cm breda blad. Den 20 cm långa blomstängeln kan i praktiken komma året runt med en eller två samtidigt öppna blommor, men de bästa blommorna produceras under vårmånaderna. Plantan kan fortsätta bilda blommor successivt under lång tid med en sådan intensitet att den kommer förbruka all sin kraft och blomma ihjäl sig. Om plantan inte producerar nya skott som den ska, eller inte blir större, rekommenderas att skära av blommande stänglar för att rädda plantan. Blommorna blir fem cm stora och är självpollinerande. Sepaler och petaler är ljusgula med nyanser i mörkt rosa. Läppen är mörkt rosa med en lilafärgad öppning. Staminoiden är ljusgul med klargula åsar och med en purpurfärgad prick.

!Skötsel
Den vill ha mycket vatten av bra kvalité runt rötterna. Ge svag gödning och vattna regelbundet eller låt den stå på ett fat med vatten hela tiden, låt den absolut inte torka ut helt. Om möjligt ge vatten med ett pH mellan 7,3 till 8,0 eller ge ett tillskott med kalk i komposten ett par gånger per år. I naturen växer de med ett pH runt 8,4 vid rötterna, något som skulle vara giftigt för andra växter, men verkar acceptabelt för //Phrag. fischeri//. De föredrar en ljus skugga mellan 10000 till 24000 lux. Då ljuset är starkare, se till att luftfuktigheten är motsvarande högre, runt åtminstone 50 till 70%. 
Den behöver ett odlingsmedium som håller fukten. Fin eller medelgrov barkkompost med sphagnum eller perlite fungerar, men kanske kan odling i semi-hydro ge en starkare planta.
Ge den en intermediär temperatur. Svalare temperaturer kan öka produktionen av antocyanin och ge rödare blommor.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragfischeri.htm]] 2015-10-05
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Phrag-fischeri.html]] 2015-10-05
[[Slipperorchids.info|http://slipperorchids.info/phragdatasheets/fischeri/index.html]] 2015-10-05
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:152864]] 2015-10-05
































































!Allmänt och utbredning
//Phal. equestris// är hemmahörande i Filippinerna och Taiwan. Denna miniatyrorkidé växer nära vattendrag från havsnivå till 300 meter över havet.
Den tillhör gruppen ''Stauroglottis'' inom släktet //Phalaenopsis//. Det latinska ordet ''equester'' har ett luddigt samband med "rytteri".

!Utseende
Denna epifytiska växt har en kort upprätt stam, helt dold av bladskidan, och en myckenhet köttiga rötter. Bladen är köttiga, mörkt glänsande med en ovalt avlång form, upp till 20 cm långa och fem till sex cm breda. En välväxt planta kan ha upp till tio blad.
Blomningstiden är mycket variabel men den vanligaste perioden är februari till maj. Den robusta blomstjälken förlängs under hela blomningen, och bildar hela tiden nya knoppar efter hand som de gamla blommorna vissnar. Blommorna är två till tre cm stora och färgen varierar från vitt till mörkt rosa eller purpur. Läppen är lika lång som sepalerna och djupt tre flikad. Den är rosa, purpur eller lila med markeringar i gult, fyra eller fem mörklila ränder och en klart gul kallus prickad i rött.
//Phal. equestris// producerar lätt keikis, nya småplantor, på blomstängeln. Dessa kan planteras för sig själva så fort de har fyra, fem rötter.

!Skötsel
Den trivs i ett ljust fönster men bör skyddas mot gassande sol. Bladverket är mycket känsligt för alltför mycket solsken. På vintern behöver växten extra ljus för att den ska växa och blomningen fortsätta. Plantan har ingen egentlig vilopaus, men under vinterns mörka tid tillväxer den inte. Den börjar växa igen i mars när ljuset tilltar. Växten tappar först några gamla blad varefter den utvecklar nya istället. Det kan bildas upptill fyra nya blad på våren.
Under tillväxtperioden bör temperaturen inte understiga 15 grader och ligga mellan 22 och 29 grader under dagen. En lägre temperatur ner till 12 grader under flera veckor på hösten behövs för att initiera blomningen. Plantan bör vattnas ordentligt, och sedan tillåtas att torka upp ordentligt. De uppskattar en torrare period under vintern, men de får aldrig torka ut helt. Näring bör tillsättas två gånger i månaden under tillväxtperioden med en kväverik gödning. För att befrämja blomning kan man använda en fosforrik näringslösning. Under kalla förhållanden räcker det med gödning en gång i månaden.
Den växer bäst i en liten kruka eller monterad på korkek. //Phal. equestris// är en epifyt så den behöver en luftig kompost. En lämplig blandning i lerkruka är en medelgrov blandning av tallbark, leca och sphagnum om man dränerar med krukbitar i botten. Omplanteringen görs på våren efter blomningen, med ett till tre års mellanrum. Vuxna plantor kan växa utan omplantering tills komposten är nästan helt nedbruten.

!Synonymer
__Homotypic Synonyms:__
//Stauroglottis equestris// Schauer (1843)
__Heterotypic Synonyms:__
//Phalaenopsis rosea// Lindl. (1848)
//Phalaenopsis equestris// var. //leucaspis// Rchb.f. (1881)
//Phalaenopsis rosea// var. //deliciosa// Burb. (1882)
//Phalaenopsis equestris// var. //leucotanthe// Rchb.f. (1883)
//Phalaenopsis rosea// var. //leucaspis// Rolfe (1886)
//Phalaenopsis rosea// var. //aurantiaca// Gower (1892)
//Phalaenopsis riteiwanensis// Masam. (1934)
//Phalaenopsis equestris// var. //alba// H.R.Sweet (1969)
//Phalaenopsis equestris// var. //rosea// Valmayor & D.Tiu (1983)
//Phalaenopsis equestris// f. //alba// Christenson (2001)
//Phalaenopsis equestris// f. //aurea// Christenson (2001)
//Phalaenopsis equestris// f. //cyanochila// O.Gruss (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phalequestris.htm]]
[[Phalaenopsis Orchids|http://www.phals.net/equestris/index_e.html]]
[[Especes de Phalaenopsis|http://perso.wanadoo.fr/bernard.lagrelle/Equestris/anglais/Phalaenopsis%20equestris%20anglais.htm]] spansk sida på engelska















!Allmänt och utbredning
Arten är endemisk för ett litet område i Bangladesh, Nepal och de indiska delstaterna Assam och Meghalaya där de växer terrestriskt på höga kalkstensklippor nära rinnande vatten runt 910 till 1500 meters höjd.
Artepitetet härstammar från det latinska ''insigne'' som betyder "hederstecken" efter blommans slående utseende. Den är typarten för släktet och taxonomiskt tillhör den undersläkte Paphiopedilum sektionen Paphiopedilum. Kromosomtalet är 2n=26.

!Utseende
Det är en medelstor art som bildar fem till sex helgröna blad, drygt 30 cm långa och tre cm breda. Undersidan av bladen är mot basen översållad med purpurfärgade prickar. Under senhösten och vintern, oktober till januari, kommer en upptill 30 cm lång blomstängel som bär en eller ibland två stycken tolv cm stora blommor. Den dorsala sepalen är ljust gulgrön med en vit kant med upphöjda, mörkt rödbrunt fläckar. Petalerna och läppen är rödaktigt kopparfärgad med tydliga nerver i mörkare brunt. Staminoiden är stor som en nagel, klart ljusgul med purpurfärgade hår och en central, upphöjd puckel. Blommorna kan stå sig i upptill två månader.

!Skötsel
Regionen där den har sitt naturliga utbredningsområde är utsatt för monsunen som ger kraftiga regn under sommaren och torra vintrar där fukten enbart kommer från de tjocka dimmorna. Minska vattningen och temperaturen under en period på vintern för att inducera blomningen. November till mars är de torraste månaderna med nattemperaturer ner till elva grader. Försök hålla luftfuktighet runt 60 till 80% hela året. Odla i en öppen, väldränerad mix av medelgrov barkkompost och perlit. Ge den en placering med ljus skugga utan direkt sol och intermediära temperaturer. Den har ingen viloperiod utan växer hela året.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium insigne// Wall. (1824)
//Cordula insignis// Raf. (1838)
__Heterotypic Synonyms:__
//Cypripedium insigne// var. //maulei// T.Moore (1861)
//Cypripedium insigne// var. //chantinii// Rolfe (1866)
//Cypripedium insigne// var. //veitchianum// Rob (1874)
//Cypripedium albomarginatum// Van Geert (1882)
//Cypripedium chantinii// auct. (1882)
//Cypripedium maulei// auct. (1882)
//Cypripedium insigne// var. //albomarginatum// Desbois (1888)
//Cypripedium insigne// var. //amoenum// Desbois (1888)
//Cypripedium insigne// var. //biflorum// Desbois (1888)
//Cypripedium insigne// var. //forstermanii// Desbois (1888)
//Cypripedium insigne// var. //gracile// Desbois (1888)
//Cypripedium insigne// var. //kimballianum// Desbois (1888)
//Cypripedium insigne// var. //maximum// Desbois (1888)
//Cypripedium insigne// var. //moensii// Desbois (1888)
//Cypripedium insigne// var. //mooreanum// Desbois (1888)
//Cypripedium insigne// var. //nilsonii// Desbois (1888)
//Cypripedium insigne// var. //rubrum-maculatum// Desbois (1888)
//Cypripedium insigne// var. //rubrum-marginatum// Desbois (1888)
//Cypripedium insigne// var. //sanderae// Rchb.f. (1888)
//Cypripedium insigne// var. //sylhetense// Desbois (1888)
//Cypripedium insigne// var. //wallacei// Desbois (1888)
//Cypripedium insigne// var. //cypheri// Van Geert (1889)
//Cypripedium insigne// var. //elegantissimum// Pucci (1891)
//Cypripedium insigne// var. //sanderianum// Rolfe (1893)
//Cypripedium insigne// var. //amesianum// Desbois (1898)
//Cypripedium insigne// var. //aureoalbum// Desbois (1898)
//Cypripedium insigne// var. //duvalii// Desbois (1898)
//Cypripedium insigne// var. //giganteum// Desbois (1898)
//Cypripedium insigne// var. //holzhausenianum// Desbois (1898)
//Cypripedium insigne// var. //madouxianum// Desbois (1898)
//Cypripedium insigne// var. //maulei-superbum// Desbois(1898)
//Cypripedium insigne// var. //pynaertii// Desbois (1898)
//Cypripedium insigne// var. //speciosum// Desbois (1898)
//Cypripedium insigne// var. //tresederi// Desbois (1898)
//Paphiopedilum insigne// var. //albomarginatum// Pfitzer (1903)
//Paphiopedilum insigne// var. //amesianum// Pfitzer (1903)
//Paphiopedilum insigne// var. //amoenum// Pfitzer (1903)
//Paphiopedilum insigne// var. //aureoalbum// Pfitzer (1903)
//Paphiopedilum insigne// var. //biflorum// Pfitzer (1903)
//Paphiopedilum insigne// var. //chantinii// Pfitzer (1903)
//Paphiopedilum insigne// var. //cypheri// Pfitzer (1903)
//Paphiopedilum insigne// var. //duvalii// Pfitzer (1903)
//Paphiopedilum insigne// var. //elegantissimum// Pfitzer (1903)
//Paphiopedilum insigne// var. //forstermanii// Pfitzer (1903)
//Paphiopedilum insigne// var. //giganteum// Pfitzer (1903)
//Paphiopedilum insigne// var. //gracile// Pfitzer (1903)
//Paphiopedilum insigne// var. //holzhausenianum// Pfitzer (1903)
//Paphiopedilum insigne// var. //kimballianum// Pfitzer (1903)
//Paphiopedilum insigne// var. //madouxianum// Pfitzer (1903)
//Paphiopedilum insigne// var. //maulei// Pfitzer (1903)
//Paphiopedilum insigne// var. //maximum// Pfitzer (1903)
//Paphiopedilum insigne// var. //moensii// Pfitzer (1903)
//Paphiopedilum insigne// var. //mooreanum// Pfitzer (1903)
//Paphiopedilum insigne// var. //nilsonii// Pfitzer (1903)
//Paphiopedilum insigne// var. //pynaertii// Pfitzer (1903)
//Paphiopedilum insigne// var. //rubrum-maculatum// Pfitzer (1903)
//Paphiopedilum insigne// var. //rubrum-marginatum// Pfitzer (1903)
//Paphiopedilum insigne// var. //sanderae// Pfitzer (1903)
//Paphiopedilum insigne// var. //sanderianum// Pfitzer (1903)
//Paphiopedilum insigne// var. //speciosum// Pfitzer (1903)
//Paphiopedilum insigne// var. //sylhetense// Pfitzer (1903)
//Paphiopedilum insigne// var. //tresederi// Pfitzer (1903)
//Paphiopedilum insigne// var. //wallacei// Pfitzer (1903)
//Paphiopedilum macfarlanei// F.G.Mey (1934)
//Paphiopedilum insigne// f. //sanderae// O.Gruss & Roeth (1999)
//Paphiopedilum insigne// f. //sanderianum// O.Gruss & Roeth (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphinsigne.htm]] 2015-05-23
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_insigne]] 2015-05-23
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/insigne/index.html]] 2015-05-23
[[The Beauty of Orchids & Flowers|http://www.orchids-flowers.com/orchids/paphiopedilum-insigne/]] 2015-05-23











!Allmänt och utbredning
//Ornithidium//, som förkortas //Ornthd.//, är ett släkte vars <$view field="count"/> medlemmar härstammar från Västindien och södra Mexiko till Bolivia, där de växer epifytiskt, litofytiskt eller rentav terrestriskt.
Släktet har ofta inlemmats i det större släktet //[[Maxillaria|54758670-0166-4014-8c61-7fdf63c69492]]// som nya molekylära studier har funnit vara ett onaturligt sammelsurium av grupper som inte är nära besläktade med varandra. Därför har det föreslagits att //[[Maxillaria|54758670-0166-4014-8c61-7fdf63c69492]]// bör delas upp i flera släkten, varav ett är  //Ornithidium//.
Artnamnet kommer från det grekiska ''ornithos'', avseende fåglar och den diminutiva ändelsen ''-idium'' antingen efter blommornas utseende påminnande om en flock småfåglar eller att många av arterna är fågelpollinerade.

!Utseende
De kan växa monopodialt, sympodialt eller sympodiala som unga exemplar med monopodiala vuxna skott. Pseudobulberna varierar i form men är oftast ovala eller runda, tillplattade från sidorna och med en till fyra blad i toppen. Rötterna är ofta orange eller bruna till färgen. Blomstänglarna kommer en och en eller i små grupper från basen av bulben eller bladen. Blommorna är mestadels spektakulära, klockformade eller sfäriska, i klara färger som rött, orange eller gult.

!Skötsel
De växer bra i intermediära temperaturer om de får en växtplats i ljus skugga, ungefär samma som för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]// men behöver hållas jämnt fuktig och ges hög luftfuktighet. De får absolut inte torka ut. Odlas bäst i en mix av hälften sphagnum och hälften barkkompost.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Maxillariinae

''Typart''
//[[Ornthd. coccineum|2510695a-e36e-434c-82f5-a8ab3a96eed6]]// Salisb. (1813)

''Uttal''
or-ni-thid-i-um

!Synonymer
__Heterotypic Synonyms:__
//Siagonanthus// Poepp. & Endl. (1836)
//Neo-urbania// Fawc. & Rendle (1909)
//Laricorchis// Szlach. (2006)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Ornithidium]]










































































!Allmänt och utbredning
//Pplnnt. teres// [pa-pil-leo-NAN-the TER-es], tidigare känd under namnet //Vanda teres//, växer terrestriskt eller epifytiskt i kinesiska Himalaya, Assam, Bangladesh, östra Himalaya, Indien, Nepal, Andaman öarna, Myanamar, Thailand, Laos och Vietnam.

!Utseende
Denna storväxta plantan har ett monopodialt växtsätt som bär långa, runda, penlika blad och luftrötter längs med en upprätt stam. Blommorna kan komma när som helst på året men vanligen under senvåren eller tidig sommar. Blomställningen kan bli tre decimeter lång med tre till sex decimeterstora, doftande blommor.

!Skötsel
Den behöver en varm växtplats i full sol för att blomma ordentligt. Bäst är att odla dem i hängande korgar med en väldränerande mix av grov barkkompost eller monterade på bitar av trädormbunke eller kork. De behöver hög luftfuktighet och om de är monterade, regelbunden och ofta vattning.

!Synonymer
__Homotypic Synonyms:__
//Dendrobium teres// Roxb. (1832)
//Vanda teres// Lindley (1833)
__Heterotypic Synonyms:__
//Vanda teres// var. //candida// Rchb.f. (1875)
//Papilionanthe teres// f. //candida// Christenson (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/papiteres.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Papilionanthe_teres]]















































































































































































!Allmänt och utbredning
//Paph. lawrenceanum// är endemisk för Limbangflodens stränder i Sabah på norra delen av Borneo. Där växer den i humus och grovt organiskt material på marknivå eller ibland på mosstäckta kalkstensklippor i varma, fuktiga regnskogar mellan 300 och 500 meters höjd över havet. Arten har inte hittats under hela 1900-talet och tros numera vara utrotad i vilt tillstånd.
Arten pollineras av en rovfluga som misstar de svarta vårtorna på petalerna för bladlöss, som är flugornas byten. På skons insida sitter tätt med svarta vårtor. På väg dit faller de ner i skon och för att ta sig ut igen måste den först passera könspelaren där den lämnar pollenklubborna den fått med sig från tidigare blommor av samma art, varvid blomman blir befruktad. Därefter kommer flugorna passera, och får med sig, en av de två pollenklubborna på den enda vägen ut ur blommans säck.
Den introducerades i Europa av F.W. Burbich när han samlade för den berömda engelska firman Beech & Sons, och är namngiven för att hedra Sir Trevor Lawrence, en hängiven orkidéodlare och ordförande i Royal Horticultural Society under 1900-talets första del.

!Utseende
Plantan har runda, bruna och tätt behårade rötter som ger upphov till fem eller sex blad. Bladen är på ovansidan mönstrade i gulgrönt och mörkgrönt, och med en ljust grön undersida. Bladen blir upptill två decimeter långa och fyra till sju cm breda. Blomstängeln blir tre decimeter lång, är purpurfärgad och tätt behårad. Varje blomstängel bär endast en ensam, tio till tolv cm stor blomma, men en blomma som är perfekt fräsch i mer än sex veckor. Vanligen blommar de under våren, ofta med en andra blomning under hösten, men den kan blomma när som helst under året bara betingelserna är de rätta. Den dorsala sepalen är vit med ränder i vinrött. Petalerna som sticker rakt horisontalt ut åt sidorna är purpurfärgad med svarta vårtor och hår längs kanterna. Läppen är brun och röd.

!Skötsel
Plantan tenderar att skicka ut en ny blomstängel när nattemperaturen går ner till mellan tio och 15 grader under en period runt 30 dagar. Plantan blommar inte konstant, mellan två och tio månader går mellan blomningarna. Blomman håller sig i perfekt skick åtminstone sex veckor. Med korrekt vattning, ljus indirekt sol och en temperatur inte högre än 26 grader och inte lägre än 18 bibehålls blomman ännu längre. Det är en värmeälskande planta som verkar trivas bättre ju varmare det är. Den föredrar en nattemperatur runt 18 grader och runt 25 grader eller lite mer under dagen. 
I sitt naturliga habitat är februari till april de torraste månaderna med bara lätta regn, resten av året utsätts de kontinuerligt för kraftiga regn. De föredrar regnvatten eller R/O-vatten och bör vattnas när komposten börjar torka upp lätt, var fjärde till var femte dag, oftare under sommaren. Ge en svag gödningsdos vid varje vattning och spola igenom komposten med rent vatten en gång i månaden så inte salterna ackumuleras i komposten.
Om den odlas inomhus, håll plantan och blomman bort från uttorkande varma och kalla drag. Försök hålla luftfuktigheten över 50% men undvik att duscha plantan direkt. 
Plantera om i ny, medelgrov kompost med perlite och sphagnum varje år då denna snabbt bryts ned i den ständiga fukten.
Den trivs förträffligt i vanlig inomhusodling utom i rent söderläge. De tolererar låga ljusnivåer, 5000 till 10000 lux.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium lawrenceanum// Rchb.f. (1878)
//Cordula lawrenceana// Rolfe (1912)
//Paphiopedilum barbatum// subsp. //lawrenceanum// M.W.Wood (1976)
__Heterotypic Synonyms:__
//Cypripedium lawrenceanum// var. //hyeanum// L.Linden & Rodigas (1885)
//Cypripedium hyeanum// L.Linden & Rodigas (1886)
//Paphiopedilum lawrenceanum// var. //hyeanum// Braem (1988)
//Paphiopedilum lawrenceanum// f. //hyeanum// O.Gruss & Roeth (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphlawrencianum.htm]]
[[Orchid Web|http://www.orchidweb.com/orchidofweek.aspx?id=103]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_lawrenceanum]]
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/3d-lawrenceanum/lawrenceanum-spin.html]] 3D-foto
[[e-How|http://www.ehow.com/info_8430429_long-paphiopedilum-lawrenceanum-bloom.html]]















































!Allmänt och utbredning
Det är en litofytisk miniatyr från delstaten Minas Gerais i östra Brasilien där den växer i små skrevor och sprickor i klipporna, bara skyddad från solen av höga gräs och små buskar. I naturen är bulberna i regel fläckade med antocyanin pigment som skvallrar om den kärva miljö växten tvingas leva i. En annan anpassning till den starka solen är deras blad som reser sig nästan rakt upp för att vända så lite som möjligt av bladytan mot solen. Bland lavar och gräs på klipporna i Minas Gerais kan de utsättas för tio timmars stekande solsken och utdragna torrperioder som bara minskas av de nattliga dimmorna som fuktar plantan.
Arten har flyttas mellan lite olika släkten under de senaste 40 åren, från det ursprungliga //[[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]// till //Hoffmannseggella// 1974, till //Sophronitis// 2000 och nu senast under 2008 till //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//.
Artnamnet anspelar på plantans minimala storlek, den tillhör de minsta av ett släkte som inte blir stora till att börja med, det är sällan plantorna blir mer än fyra cm totalt.

!Utseende
De är små, kompakta plantor med drygt en och en halv cm stora pseudobulber som växer tätt tillsammans. I toppen av bulben kommer ett ensamt, stelt upprätt blad som blir lika långt eller mindre än bulben. Om plantan står mycket ljust kan bulb och blad bli lätt purpurfärgat. Under våren och sommaren kommer en centimeterlång blomstängeln från toppen av bulben, omsluten av en blomskida, och bär en enda blomma. Blomman är med sina två cm stor i förhållande till resten av plantan och i en ljus lavendelfärg. Läppen är purpurfärgad med en orange mittsträng.

!Skötsel
I sitt naturliga habitat växer den i karga, solstekta miljöer endast skyddad från solen av högt gräs och låga, förkrympta buskar och under många månader av året vattnade endast av nätternas dagg. I odling är det inte rekommenderat att försöka efterlikna en så ogästvänlig miljö.
Den behöver dock torka upp lätt mellan vattningarna, och om man kan hålla en tillräcklig luftcirkulation har vissa odlare haft framgång med att efterlikna naturens nattliga dimmor genom att vattna sent på kvällen. Men om luftcirkulationen är för dålig riskerar plantorna att ruttna eller att svamp får fotfäste. Vattna annars två till tre gånger i veckan, mindre vid svalt väder, låga ljusnivåer eller om den är planterad i plastkruka.
Även om växten är van vid starkt solsken, gynnas den av en inte för kraftig belysning. Den bör trivas tillsammans med övriga cattleyor och deras förhållanden. Ge den en sval och ljus växtplats utan direkt sol eller bara direkt sol några timmar under för- eller eftermiddagen. Den kan klara temperaturer ner till bara några plusgrader och upp över 30 grader, men den föredrar den svalare delen av temperaturspannet. Eftersom de kommer från högt belägna bergsområden, gynnas de av en sänkning av nattemperatur och en tydlig vintervila med torka och en svalare placering.
Det tar tid för dem att bilda nya rötter och de tycker inte om att störas, så plantera om bara när det är absolut nödvändigt. Trots att de inte vill planteras om för ofta bör de inte planteras i för stora krukor. Ofta räcker en 10cm kruka. Lerkrukor är att föredra då de ge bättre luft runt rötterna och höjer luftfuktigheten. De planteras med fördel i oorganiska medier som inte bryts ner, till exempel akvariegrus i storlek som ärtor, lecakulor eller liknande. Göd försiktigt, de är känsliga för uppbyggnad av salter i komposten. Spola igenom komposten med rent vatten minst en gång i månaden, speciellt om de är planterade i porösa medium som lätt kan ackumulera salter.

!Synonymer
__Homotypic Synonyms:__
//Laelia liliputana// Pabst (1973)
//Hoffmannseggella liliputana// H.G.Jones (1974)
//Sophronitis liliputana// Van den Berg & M.W.Chase (2000)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/laelialilliputana.htm]]
[[the Orchid Photo Page|http://www.orchidworks.com/brazil/howtogrow.html]] släktet [[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]/[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]














!Allmänt och utbredning
Det finns <$view field="count"/> arter i detta släkte, //[[Nid. ottonis|d4196f31-5a63-4d99-b599-e9ee6faecde0]]// och //[[Nid. boothii|acd3f701-89fd-4707-855c-2dea6b03bfa3]]//, båda är varmväxande epifyter från Mexiko till Peru och den karibiska övärlden. De växer i fuktiga skogar från havsnivå till 1500 meters höjd.
Namnet kommer från ett anagram av släktet //[[Dinema|7464d986-4c0b-4924-a26b-38865bf3eadf]]// som har flera likheter med //Nidema//.

!Utseende
De får långsmala pseudobulber på ett krypande rhizom. Varje bulb bär ett eller två långsmala blad.
Blomstängeln kommer från toppen av de nya bulberna. Blommorna kommer i ljusa gröna eller gula färger, har fria sepaler och petaler med en läpp som är helt fri från kolumnen och fyra hårda, hoptryckta polliner.

!Skötsel
Trots deras krypande växtsätt trivs de bra i kruka. De kan även växa monterad om de bara får tillräckligt med vatten och ljus, och en sval till varm omgivning. De kräver en väldränerad kompost.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[Nid. ottonis|d4196f31-5a63-4d99-b599-e9ee6faecde0]]// Britton & Millspaugh (1920)

''Uttal''
ny-DEE-ma

''Synonymer''
N/A

!Rekommenderad läsning

























!Allmänt och utbredning
I sina naturliga habitat växer de <$view field="count"/> arterna //Cymbidium// epifytiskt, litofytiskt eller terrestriskt på höga altituder i den tempererade zonen av Kina och Japan, söderut genom Asien över ekvatorn med tre endemiska arter i Australien. En art, //[[Cym. macrorhizon|e65f2fda-cea2-4bf1-9d36-0bad855748a5]]//, är en saprofyt som växer helt under jord förutom när blomstjälken bryter fram! Arterna inom släktet är indelade i tre grupper. Den första gruppen är de storblommiga arterna från Himalaya och högre altituder i Kina. Dessa kräver en uttalat kall period för att utveckla blommor. Den andra gruppen växer kallt till svalt året runt och behöver inte någon svalare period för att blomma. Den sista gruppen är de varmväxande tropiska växterna som kräver en varm växtplats hela året. På grund av sina hängande blomstänglar planteras dessa gärna i korgar.
Artnamnet kommer från grekiskans ''kumbos'' som betyder "hål, hålighet", och refererar till formen på läppens bas.

!Utseende
Cymbidier tenderar att få fler blad än de flesta orkidéer, och de flesta arterna får tjocka rötter klädda med ett svampartat vitt velamen. Blomstjälkarna bryter fram från basen av de nyaste pseudobulberna. De blommar under vintern, och varje planta kan ha fler än femton blommor. De vaxartade blommorna kommer i regnbågens alla färger, utom blått och svart. Varje blomma kan ha en diameter upp till tio cm och håller ungefär tio veckor, beroende på arten. När knopparna på blomstängeln börjar öppnas bör plantan skyddas från allt för stark sol, annars är risken att blommorna mörknar i färgen.

!Skötsel
Cymbidier kan tolerera varma sommardagar så länge de får en period med svala nätter, då temperaturen går ner till tio till femton grader. En etablerad planta kan tåla temperaturer ända ner till nollan. De bör däremot inte utsättas för frost. Det bästa är en plats med morgon- och/eller kvällssol med skydd mot den starka middagssolen. Ett ljust gyllengrönt blad med gula inslag indikerar att plantan får så mycket ljus den tål. Likaså visa ett mörkt grönt blad att de inte får tillräckligt med ljus. En //Cymbidium// vill inte torka ut helt, men den bör inte heller stå blöt. En vattning i veckan under vintern kan vara lagom. Under sommartillväxten går det knappt att övervattna plantan. Vid omplantering ungefär vart tredje år bör en genomsläpplig och svagt sur kompost användas, till exempel en barkkompost med mossa, sand och leca. Pseudobulber utan blad kan användas för att föröka en planta. Tag i så fall en ensam bulb, begrav upp till halva bulben i mossa eller fin barkkompost. Håll den skuggad på en varm plats tills nya skott kommer fram, därefter plantera som vanligt. Det kan ta mer än tre år att få en blomfärdig planta med denna metod.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Cyrtopodiinae

''Typart''
//[[Cym. aloifolium|ebdfcdcb-7a3d-494e-ad98-2fe707c109df]]// Swartz (1799)

''Uttal''
sim-BID-ee-em

''Synonymer''
__Heterotypic Synonyms:__
//Jensoa// Raf. (1838)
//Cyperorchis// Blume (1849)
//Iridorchis// Blume (1859) nom. illeg.
//Arethusantha// Finet (1897)
//Pachyrhizanthe// Nakai (1931)
//Cyperocymbidium// A.D.Hawkes (1964)
//Liuguishania// Z.J.Liu & J.N.Zhang (1998)
//Wutongshania// Z.J.Liu & J.N.Zhang (1998)
//Cymbidiopsis// H.J.Chowdhery (2009)

!Rekommenderad läsning
[[Nordvästra Skånes Orkidésällskap|http://www.nsorkide.se/page_1164647086421.html]]
[[Carter and Holmes Orchids|http://www.carterandholmes.com/cymcare.html]]
[[Cymbidium Society of America|http://www.cymbidium.org/cymbidium.html]]
[[Beautiful Orchids|http://www.beautifulorchids.com/orchids/orchid_care_tips/individual_care/cymbidium.html]]
[[Everglades Orchids|http://www.evergladesorchids.com/cymculture.html]]
[[Easy Orchids|http://www.easyorchids.co.uk/site/cymbidium-orchids.html]]
[[Cloud"s Orchids|http://www.cloudsorchids.com/ccym.htm]]





!Allmänt och utbredning
Arten återfinns epifytiskt i låglandsskogar i Thailand, Malaysia, Borneo, Små Sundaöarna och Sumatra upptill 400 meters höjd över havet.
Namnet kommer efter blommans utseende ska ha påmint om [[den mytologiska gorgonen Medusa|https://sv.wikipedia.org/wiki/Medusa]] som sades ha ett hår av ormar. Taxonomiskt tillhör den underfamiljen Epidendroideae tribus Dendrobieae, undertribus Bulbophyllinae sektionen Desmosanthes.

!Utseende
Den bildar ett krypande rhizom med små pseudobulber mindre än fyra cm, med ett ensamt, avlångt, tio cm lång mörkgrönt blad i toppen av bulben. Under hösten och våren kommer från basen av årets bulber en upptill 20 cm lång blomstängel som i toppen bär en paraplyliknande blomställning som kan innehålla mer än 100 blommor. Sepalerna är drygt 15 cm långa medan pedalerna är nästan genomskinliga och endast millimeterstora och det är först med ett starkt förstoringsglas man kan urskilja den för orkidéer så typiska blomformen. Blommorna är gula, ljust gula eller vita, med eller utan rödaktiga prickar. Den har en stark, inte särdeles angenäm doft, speciellt framträdande under morgontimmarna.

!Skötsel
Denna art växer bra monterad eller i öppna korgar eller krukor med en mix av hälften fin barkkompost och hälften sphagnum. Ge den halvskugga med varma temperaturer och god luftcirkulation för att undvika svamptillväxt. Den älskar vatten så vattna och gödning ordentligt under sommarens tillväxt, tillåt den inte att torka ut. På vintern kan komposten tillåtas torka ut lite mer. Rötterna tycker inte om att störas av täta omplanteringar.

!Synonymer
__Homotypic Synonyms:__
//Cirrhopetalum medusae// Lindley (1842)
//Phyllorkis medusae// Kuntze (1891)
__Heterotypic Synonyms:__
//Cirrhopetalum medusae// var. //album// Rolfe (1923)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cirrhopetalummedusae.htm]] 2015-07-28
[[Wikipedia|https://en.wikipedia.org/wiki/Bulbophyllum_medusae]] 2015-07-28
[[Camp Lot A Noise Tropicals|http://www.clanorchids.com/ezine/page4.html]] 2015-07-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Bulbophyllum_medusae]] 2015-07-28













































































!Allmänt och utbredning
//Paph. qingyongii// [paff-ee-oh-PED-ih-lum CHING-YONG-ee-eye] är en nyligen upptäckt art som bara samlats in en enda gång på en inte närmare beskriven plats i Motuo i den sydöstra delen av den kinesiska provinsen Xizang, eller Tibet, där den växer på humusrika, buskiga sluttningar runt 1200 meters höjd. Hela utbredningsområdet är troligen mindre än 4 km2 med endast 50 vuxna individer och minskande. Vissa taxonomer tror att det bara är en naturligt förekommande hybrid.

!Utseende
Den är mycket lik och nära besläktad med //[[Paph. venustum|26bdbddd-fba3-44fd-9aea-497dcf352b14]]// från vilken den skiljer sig genom att ha fler blad i rosetten, åtta till nio, bladen saknar eller har endast mycket lite mönster. Petalerna är grönvit med rödlila fläckar och staminoiden är i stort sett avlång.

!Skötsel
Ge den en skuggig eller halvskuggig växtplats med intermediära eller varma temperaturer. Håll fuktig, låt den inte torka ut. Odla i en väldränerad, humusrik mix av barkkompost och sphagnum.

!Synonymer
N/A

!Rekommenderad läsning
[[Dr.Tanaka's Paph site|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu52.html]] 2015-08-12











!Allmänt och utbredning
//Phrag. caricinum// [frag-muh-PEE-dee-um kar-ih-SIN-um] är en art som förekommer från Ecuador, Peru, Bolivia till västra Brasilien mellan 160 och 1500 meters höjd där den klamrar sig fast på klippor av kalksten eller sandsten nära vattenfall, ibland växer den terrestriskt i röd lera bland gräs och mossa längs stränderna, alltid nära rinnande vatten, ofta under högvattenmärket. Den är mycket lik //[[Phrag. pearcei|]]//, men de kan skiljas från varandra genom utbredningsområde, blommans färg och behåring, blomställningens form och läppens färgmönster. //Phrag. caricinum// samlades ursprungligen in av Bridges 1846 i Bolivia. Han gav dessa plantor till professor Lindley för identifiering, som erkände den som en ny art och kallade den //Cypripedium caricinum//. Den ursprungliga herbariummaterial rörande denna art kan fortfarande hittas i Lindley-herbariet vid Kew Gardens.
Namnet kommer efter starrsläktet //Carex//, från latinets ''caric''  som betyder "starr" efter de smala bladen. Kromosomtalet är 2n=20, 22. Taxonomiskt tillhör den sektionen Himantopetalum.

!Utseende
Rhizomen blir korta och tjocka, två cm långa, så den bildar stora, kompakta klumpar med skotten tätt ihop. Den formar en rosett med 30 till 60 cm långa blad som blir upptill tre cm breda vid basen men bara drygt en cm för det mesta av längden. Ovansidan är mörkt grön och undersidan ljusgrön med en tydlig köl. Blomstängeln som kommer under sommaren eller hösten blir upptill en halvmeter lång och kan vara grenad eller ogrenad. Ogrenad bär den tre till sex blommor men med ett par grenar kan det bli uppåt tio blommor som öppnas successivt. En blomma i taget kan vara öppen under upptill tre månader. Blommorna är gulgröna med orange eller rödbruna nerver. Den främre sepalen är kortare än den dorsala sepalen, och helt täckt med hår. Den ljusgröna staminoiden är hjärtformad, och vid basen täckt med brunaktiga mörkröda hår.

!Skötsel
I naturen växer den i konstant väta med hög luftfuktighet, den får absolut inte torka ut. Vattna varje dag under varma sommardagar, varannan dag under vintern. Ge svag gödning en gång i veckan. Ge den även en varm, ljus växtplats utan direkt sol, 15 till 20 grader nattetid och inte över 30 grader dagtid. Vintertid kan temperaturen få gå ner några grader till under två månader, men inte under 12 grader som kallast.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium caricinum// Lindl. & Paxton (1850)
//Selenipedium caricinum// Rchb.f. & Warsz. (1854)
//Paphiopedilum caricinum// Stein (1892)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragcarinicinum.htm]] 2015-09-30
[[Slipperorchids.info|http://www.slipperorchids.info/phragdatasheets/caricinum/index.html]] 2015-09-30
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=49]] 2015-09-30






























































































































!Allmänt och utbredning
Denna epifytiska miniatyrart återfinns i Panama och Colombia mellan 1100 och 1400 meters höjd över havet. Det finns två färgformer, en röd form som växer i Panama och en gul form i Colombia.
Det är den enda medlemmen i undergenus Rubella.

!Utseende
Arten saknar pseudobulber utan bladen kommer direkt från en underjordisk stam. Den upprätta bladstammen är skyddad av två eller tre täckblad och bär endast ett rundat blad i toppen. Bladet blir knappt mer än en till en och en halv cm stora och överskuggas av blomstängel som kan bli uppåt fem cm. Blomstängeln bär endast en blomma åt gången, men den kan blomma när som helst under året.
Den hårförsedda läppen har en stor, rundad, konkav kallus tätt beströdd med tunna hår vid basen och att den har en kort, cylindrisk könspelare med fria pollenklubbor och -märke som hos arterna i undergenus Pleurothallis men med en växtmorfologi som hos arterna i undergenus Specklina.

!Skötsel
Arten är ovanlig i odling. Den vill ha varmt, inte under 13 grader och inte över 29. Ge den en hög luftfuktighet och halvskugga med 15000 till 25000 lux. Håll den fuktig med fyra till sju vattningar i veckan.

!Synonymer
__Homotypic Synonyms:__
//Rubellia rubella// Luer (2004)
__Heterotypic Synonyms:__
//Platystele aurea// Garay (1973)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/brachandina.htm]]






















































!Allmänt och utbredning
//Porroglossum// är ett släkte som består av <$view field="count"/> arter distribuerade genom Andernas bergiga molnskogar. Den största koncentrationen av släktet finns i Ecuador och Colombia där de växer som epifyter eller emellanåt som litofyter. Ett fåtal arter finns också i Peru och Venezuela. 
De är nära släkt med //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]// som de skiljer sig från genom den rörelsekänsliga, mobila läppen som hos //Porroglossum// snäpper ihop om pollinatören när denna vidrör läppen. Blomman fångar helt enkelt insekten under en tid så att pollineringen går rätt till.
Namnet kommer från grekiskans "långt borta" och "tunga" som anspelar på det stora avståndet mellan könspelaren och läppen, något som är väldigt specifikt för släktet.

!Utseende
De knappt decimeterlånga bladen kommer på en kort, underjordisk stam. 
Läppen är det mest fascinerande och utmärkande draget hos släktets blommor. Läppen sitter som på ett gångjärn och har en mekanism som omedelbart stänger igen om en pollinatör när denne vidrör läppen. Detta stänger in insekten för att tillförsäkra att pollinerna fastnar på och följer med insekten till en annan planta när blomman öppnas efter en dryg halvtimme. Blomman stänger också under natten och öppnas igen i gryningen.
Blomstängeln hos //Porroglossum// är längre än bladen och blommar successivt med små blommor där petalerna som är mycket små och köttiga.

!Skötsel
De kommer huvudsakligen från molnskogar i höga bergsområden och bör därför hållas fuktiga utan direkt sol. Alla arter odlas bäst svalt och i hög luftfuktighet.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//Prgm. colombianum// Schlechter 1920 synonym till //[[Prgm. mordax|8af34503-a11f-499e-bc93-2f06922aa351]]// Luer 1970

''Uttal''
por-roh-GLOS-sum

''Synonymer''
__Heterotypic Synonyms:__
// Lothiania// Kraenzlin (1924)

!Rekommenderad läsning
[[Orchids of the Plurothallid Alliance|http://www.pleurothallids.com/porroglossum.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Porroglossum]]

































!Allmänt och utbredning
Detta släkte från Mexiko till Brasilien och Bolivia innehåller <$view field="count"/> arter, alla epifyter. De är miniatyrer, och karaktäriseras av sitt solfjäderformade bladverk som tidigare också gav släktet dess namn, //Psygmorchis//, sammansatt av de grekiska orden ''psygma'' som betyder "solfjäder" och ''orchis''. Nya taxonomiska studier har flyttat släktet till det mexikanska släktet //Erycina//.
Dagens släktnamn kommer efter Afrodite som på berget Eryx i Sicilien dyrkades som Erycina.

!Utseende
De små plantorna har inga pseudobulber, och har komprimerade, tillplattade blad som bildar en liten solfjäder. Blomstjälken kommer fram mellan bladen och får oftast endast en ensam blomma. Blomman är tämligen stor i förhållande till resten av växten och påminner om dem hos //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]//. De har emellertid en djupare fyrdelad läpp, en könspelaren med två utbredda vingar och en triangulär ståndare.
Arterna i släktet är kortlivade i naturen, från bara tre år upptill åtta för //[[Ercn. pusilla|ef47fb20-f0f7-4f70-b3f4-f2971a6be9b0]]//, den mest långlivade av arterna.

!Skötsel
De växer bäst monterad på kork under varma förhållanden. De vill ha en ljus växtplats utan direkt solsken.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//[[Ercn. echinata|01f225ed-cdd8-4841-868c-e089bb8ac3e4]]// Lindley (1853)

''Uttal''
eh-Rih-SIY-Naa

''Synonymer''
__Heterotypic Synonyms:__
//Psygmorchis// Dodson & Dressler (1972)
//Stacyella// Szlach. (2006)

!Rekommenderad läsning
[[Annals of Botany|http://aob.oxfordjournals.org/cgi/content/full/95/1/191]]


















































































































































!Allmänt och utbredning
//Masd. uniflora// [maz-de-VAL-lee-a yoo-nee-FLOR-a], är en art endemisk för regionen Junán i Peru, där den växer terrestriskt i klippskrevor eller epifytiskt på buskar i molnskogar mellan 2500 och 3000 meters höjd över havet.
Det som särskiljer denna art från andra inom släktet är de fuchsiafärgade blommorna, de relativt korta spetsarna på sepalerna, de framträdande basala petalernas flikar och den utdragna basen på könspelaren.
Två spanska botaniker, Ruiz och Pavon, beskrev släktet //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]// för ungefär 200 år sedan efter att de hittat //Masd. uniflora// i bergen i Peru. De dedikerade sin upptäckt till en vän och kollega, botanikern dr. Jose Masdevall.
Namnet kommer från det latinska ''uniflorus'', "en-blommig", som hänvisar till den en blommiga blomställning hos arten.

!Utseende
Den saknar pseudobulber utan den smala bladstjälken kommer direkt från en underjordisk stam. Stjälken är vid basen löst omsluten av två eller tre tunna täckblad och bär ett enstaka, utdraget elliptiskt blad. Från basen av bladstjälken kommer under vintern en upptill 22 cm lång, upprätt blomstängel som höjer sig gott och väl över bladen med en ensam, centimeterstor klockformad blomma i gnistrande klara fuchsiafärger.

!Skötsel
Ge plantan en sval, halvskuggig plats och odla den i en mix av fin barkkompost med perlit eller sphagnum. Vattna regelbundet och håll komposten fuktig. Den kan också med framgång odlas monterad om luftfuktigheten är tillräckligt hög.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/masuniflora.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Masdevallia_uniflora]]
[[The Pleurothallid Alliance|http://www.pleurothallids.com/index.php?option=com_content&view=article&id=1330&Itemid=58]]





















































































































!Allmänt och utbredning
//Aa// är ett släkte med <$view field="count"/> arter som i allmänhet, liksom det närbesläktade //[[Myrosmodes|76ad80e2-4958-4a9d-87c3-d9eba836699b]]//, växer terrestriskt i svala områden med öppna skogs- och buskmarker, vanligen nära rinnande vatten, över 3100 meters höjd nära snögränsen i Anderna från Venezuela till norra Chile och Argentina och på Costa Rica. Vissa arter kan växa lägre, exempelvis //[[Aa. achalensis|e78c9cb2-b702-41c1-86f7-b157762bcac2]]// som i Argentina når ner till 700 meter över havet.
Den första vetenskapliga beskrivningen av en art inom släktet gjordes 1815 av Karl Sigismund Kunth, som namngav det //Ophrys paleacea//. Senare flyttades den till //Altensteinia paleacea//. 1854 separerade Heinrich Gustav Reichenbach //Aa// från //Altensteinia//, till att omfatta de två arterna //[[Aa. argyrolepis|ca0f57fd-fe5b-4650-bc2d-96034490db13]]// och //[[Aa. paleacea|096f6f2f-617f-40ba-b3fc-d7463212cbf5]]//. Några år senare flyttade Reichenbach åter igen släktet tillbaka till //Altensteinia//. Slutligen 1912  bytte Rudolf Schlechter tillbaka till //Aa// eftersom fler arter upptäckts och gjorde det nya släktet mer betydande.
Namnets ursprung är höljt i dunkel men enligt den gällande förklaringen ska Heinrich Gustav Reichenbach 1854 ha bildat släktet //Aa// enbart för att det skulle komma först i alla listor. En annan, ifrågasatt, förklaring är att det namngavs för att hedra den [[holländska tryckaren och gravören Pieter van der Aa|http://en.wikipedia.org/wiki/Pieter_van_der_Aa]] som medverkade till [[botanisten Paul Hermans|http://en.wikipedia.org/wiki/Paul_Hermann]] verk ''Paradisus Batavus''. På gammal-germanska betydde ''aa'' "små vattendrag" som påminner om deras naturliga habitat vilket kan vara en annan förklaring.

!Utseende
De saknar pseudobulber utan bildar en basal bladrosett nära marken. Från mitten av rosetten kommer en lång, upprätt blomstängel som bär många små, grönvit blommor. Blomman är upp-och-ner-vänd (eller egentligen vänd 360 grader, då de flesta orkidéer vänder blomman 180 grader under utvecklingen) med läppen ovantill och huvformad, kantad med fransar. De har en kraftig doft som ska attrahera flugor som pollinatörer.

!Skötsel
Släktet återfinns normalt inte i odling då de har en preferens för kalla växtförhållanden som är svåra att efterskapa för de flesta amatörodlare.

!Taxonomi
''Underfamilj'':  Orchidoideae
''Tribus'': Cranichideae
''Undertribus'': Prescottiinae

''Typart''
//Ophrys paleacea// H.B.K. (1816) synonym med //[[Aa. paleacea|096f6f2f-617f-40ba-b3fc-d7463212cbf5]]// Rchb.f (1854)

''Uttal''
ah-ah

''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Aa_(orchid)]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Aa]]






!Allmänt och utbredning
Denna miniatyrart från de varma och torra låglandsskogarna och savannliknande busklandskapen i Vietnam, Laos, Myanmar/Burma och norra Thailand växer på klippor och buskar mellan 800 och 1550 meters höjd.
Den liknar arterna [[Den. dickasonii|a75a53fa-30df-434e-8023-e3168a4eac84]] och [[Den. lamyaiae|9d19e929-69d0-443b-990d-0e9ec25ac730]] men har mindre blommor med en bredare läpp med tre centrala kölar.
Arten verkar ha möjlighet att växla koldioxidfixering från den mer fördelaktiga [[C3 fotosyntetiseringen|http://sv.wikipedia.org/wiki/C3-v%C3%A4xter]] till den långsammare [[CAM fotosyntes (Crassulacean Acid Metabolism)|http://sv.wikipedia.org/wiki/CAM_fotosyntes]] när temperaturen stiger och luftfuktigheten sjunker för lågt. Om temperaturen stiger över 26 grader bör luftfuktigheten hållas över 70% för bästa tillväxten.
//Den. unicum// är en av få orkidér och den enda kända inom dendrobiumsläktet, som bildar stärkelserika pseudopollen istället för nektar för att faktiskt belöna sina pollinerare.
Artnamnet betyder "den unika".

!Utseende
Det är en liten planta som får tio cm långsmala, spolformiga, upprätta pseudobulber tätt tillsammans i nyanser av grönt och purpur. När bulberna blir äldre ändrar de färg åt det gula hållet. Varje bulb bildar två till tre smala, fem cm långa, blad och under senvåren kommer från toppen eller nära toppen flera stycken knappt fem cm långa blomstänglar med upptill fyra stycken fem cm stora blommor per stängel. Både nya bulber med blad och äldre bladlösa bulber kan bilda blomstänglar. När knopparna kommer börjar bladen normalt falla av. De gnistrande orangefärgade blommorna har vridna sepaler och petaler och sägs ofta dofta mandariner eller nyvässade färgkritor. Läppen är ljust orange eller gul med röda ränder.

!Skötsel
Den behöver varma förhållanden under sommarhalvårets tillväxtperiod men svala och torra under vinter och vår, nattemperaturen kan gärna gå ner till 15 grader för att stimulera knoppbildningen. Sommartid kan den gärna stå utomhus då den naturliga temperaturväxlingen med dag och natt ökar tillväxthastigheten. Den kan med fördel odlas monterad om den vattnas dagligen under sommaren, eller i små krukor med fin barkkompost eller sphagnum. Plantera om på våren efter blomningen.
I sina naturliga habitat utsätts den för mycket nederbörd under monsunregnen maj till oktober och betydligt torrare resten av året. Låt komposten torka lätt mellan vattningarna men den får inte torka ut helt och ge en luftfuktighet över 50% om möjligt. Övervattning kan lätt orsaka rotröta och svampangrepp. En minskning av vatten och gödning under senhösten är främjande men åtminstone två månader under senvintern med ganska hård torka och ingen gödning tills de nya skotten kommer är absolut nödvändigt för en bra tillväxt. Spola gärna igenom komposten med bara rent vatten en gång i månaden för att undvika uppbyggnaden av salter. Ge svag gödning två gånger i månaden under tillväxten, en konduktivitet mellan 100 till 200 μS (max 600 μS), ett pH straxt under sex och en hårdhet av högst 12° dH. Rötterna är ganska känsliga för salter och bränns lätt.
De behöver en ljus halvskugga, runt 15000 till 20000 lux, ett östfönster, eller söderläge under vintern, är utmärkt. Ju ljusare den står under sommaren desto mer vatten behöver den. Ge den mer ljus under vintern för att främja knoppsättningen och skugga den när de nya skotten kommer på våren. 

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrobiumunicum.htm]] 2014-12-12
[[Orchid Web|https://www.orchidweb.com/products/dendrobium-unicum~1072.html]] 2014-12-12
[[Orchid Wiki|http://orchids.wikia.com/wiki/Dendrobium_unicum]] 2014-12-12
[[World of Orchids)|http://www.orchidee.ws/orchideen/dendrobium/unicum/unicum.htm]] (ryska) 2014-12-13

;K. L. DAVIES and M. P. TURNER
://Pseudopollen in Dendrobium unicum Seidenfadden (Orchidaceae): Reward or Deception?//
:Ann Bot. Jul 2004; 94(1): 129-132., doi: 10.1093/aob/mch118
:http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4242374/



























!Allmänt och utbredning
Det är en varmväxande epifytisk miniatyrorkidé från bergsskogarna i Myanamar, Thailand och Laos mellan 500 och 1500 meters höjd. 
Artepitetet anspelar på de håriga pseudobulberna och bladen.

!Utseende
Plantorna har ett krypande växtsätt med korta, tjocka, köttiga pseudobulber som lagrar stora mängder vatten. Bulberna bli mindre än två dm stora, mer vanligt är mellan fem till tio cm. Hela plantan är täckt med ett tjockt lager vitt hår. De två till sex grågröna bladen blir fem cm långa och kommer alternerande på bulberna och fälls på vintern. De citrondoftande blommorna kommer på en kort stängel från toppen av både bulber med och utan blad och är hållbara ungefär tre veckor. Blommorna är tre till sex cm stora i klart gult med röda och gröna markeringar på läppen.

!Skötsel
De behöver låga ljusnivåer och mycket vatten under sommaren och mycket ljus och lite vatten under den svalare vintervilan för att blomma under våren och sommaren. Vattna två gånger i veckan under sommaren och håll igen vattningen under två eller tre månader på vintern från det bladen faller tills de nya skotten kommer på våren. Under vintervilan kan temperaturen få gå ner till så lågt som tio grader. Håll luftfuktigheten hög hela året.
De trivs bättre odlade i små krukor än monterad. Använd en väldränerad kompost med sphagnum och medelgrov bark. De klarar en utomhusvistelse under sommaren bra om de inte utsätts för den allra starkaste middagssolen.

!Synonymer
__Homotypic Synonyms:__
//Callista senilis// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrobiumsenile.htm]]
[[Butterflys & Orchids Gallery|http://www.orchidfoto.com/thumbnails.php?album=114]] foton
[[SpeciesOrchids|http://www.speciesorchids.com/DendrobiumSenile2.html]]
[[Orchids.co.in|http://www.orchids.co.in/orchid-plant/dendrobium-senile.shtm]]
[[Green Drop|http://green-drop-home.com/zencart/index.php?main_page=product_info&cPath=1_6_26&products_id=112]]
[[Thomas Orchids|http://www.orchids.se/dendrobium_senile.htm]]




















































!Allmänt och utbredning
Till skillnad från många av sina släktingar växer den främst litofytiskt på stenar och bara undantagsvis på träd. Den skickar sina ovanligt tjocka rötter genom mossan på klipporna och breder ut sina blomstänglar längsmarken. Den växer i bergsområden i Nepal, provinserna Sikkim, Lachen, Meghalaya, Lungshel och Assam i nordöstra Indien, Nepal, Bhutan, Myanmar/Burma, Thailand, provinsen Yunnan i Kina och möjligen Laos och Vietnam mellan 1450 och 2200 meters höjd. Arten samlas först in av Gibson i Khasia Hills i norra Indien 1837. Den beskrevs senare av Paxton i ''Magazine of Botany'' 1843. 1983 upptäcktes arten i buskvegetation med //Rhododendron lyi// och //Agapetes saxicola// i norra Thailand av Du Puy och Seidenfaden.
Den har fått sitt namn efter hertigen av Devonshire Chatsworth, Storbritannien, som var den förste att få den i blom 1843. Kromosomtalet är 2n=40.

!Utseende
Det är en medelstor art som får små ovala pseudobulber med två till fem läderartade blad i toppen. Dess blad blir upptill 30 cm långa, fem cm breda och liknar de hos //[[Cym. lancifolium|9ae713c6-767d-4560-b108-f61e9b54921c]]// men är tjockare och kraftigare. Under vår och sommar kommer en upptill halvmetern lång, hängande, blomstängel med mellan 15 och 35 hållbara blommor tätt tillsammans. De fyra cm stora blommorna blir i stort sett gulgröna, randiga och prickiga med brunt på sepaler och petaler med två rödlila fläckar på sidorna av den rosafärgade läppen.

!Skötsel
Den bör ges en sval till intermediär växtplats i halvskugga eller ljust utan direkt sol, 20000 till 30000 lux. Odla i en öppen, väldränerad mix med medelgrov barkkompost och perlit. Med tanke på dess hängande blomstänglar är en hängande korg att föredra. De nya skotten kommer från juni till november, men inte förrän blomningen är över. Den föredrar att få torka upp mellan vattningarna, vattna ungefär två gång i veckan under sommaren för att minska vattningen under vintern. Till skillnad från de flesta andra inom släktet behöver den en lätt vila utan vatten och gödning på vintern för att initiera blomningen.

!Synonymer
__Heterotypic Synonyms:__
//Cymbidium sikkimense// Hook.f. (1890)
//Cymbidium rigidum// Z.J.Liu & S.C.Chen (2000) nom. illeg.

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cymdevonianum.htm]] 2015-09-10
[[Orchids Wiki|http://orchids.wikia.com/wiki/Cymbidium_devonianum]] 2015-09-10
[[Cymbidium Species|http://www.cymspecies.com/devonianum.htm]] 2015-09-10



!Allmänt och utbredning
Den återfinns i sydöstra Laos och norra delen av Vietnam där den växer terrestriskt eller litofytiskt på mossiga granitklippor i fuktiga molnskogar mellan 900 och 1220 meters höjd.
Arten är uppkallad efter orkidéentusiasten S. Gratrix från Manchester, England. Den är nära besläktad med //[[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]]//, //[[Paph. villosum|4ada762d-92fa-465b-aee9-f1c979290f41]]// och //[[Paph. exul|22fbd62d-8746-4d6b-b866-0055c6b01690]]//. Utseendemässigt är den mest lik //[[Paph. affina|ea06aa14-2ba6-4f80-a719-73c052999018]]// men förutom att ha helt olika bladproportioner, skiljer sig dessa två arter i storlek och pigmenteringen av bladen. Hos //Paph. gratrixianum// är blomstängeln ungefär halva längden av de karaktäristiska långa stänglarna hos //[[Paph. affina|ea06aa14-2ba6-4f80-a719-73c052999018]]//, en egenskap som är dominerande i hybriderna av den senare. Även om båda arterna har lila markeringar på undersidan av bladen mot basen, är mönstren helt annorlunda. Hos //Paph. gratrixianum// är de purpurfärgade markeringarna fördelade i ett tät område med jämn marmorering. //[[Paph. affine|ea06aa14-2ba6-4f80-a719-73c052999018]]// däremot har en ojämn, mindre tät pigmentering som är avbrutna av iögonfallande tydliga fläckar som är helt frånvarande från //Paph. gratrixianum//. Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Paphiopedilum. Kromosomtalet är 2n=26.

!Utseende
Det är en liten, klumpbildande art med fyra till åtta långsmala helgröna blad som kan bli 30 cm långa och två till fyra cm breda. Undersidan är purpurprickad mot basen. Under hösten kommer en mer än 20 cm lång blomstängel, tätt beklädd med purpurfärgade, fina hår. Stängeln bär en ensam, hållbar blomma som blir åtta cm stor. Blomman har glänsande kopparfärgade petaler och en rosa och gul läpp. Den dorsala sepalen är ljusgrön eller gräddgul vid basen och vit på den övre tredjedelen, med vertikala mörkröda ränder och rader med prickar.

!Skötsel
Den har ingen torrperiod under vintern och tidiga våren som vanligtvis är den torra säsongen i norra Vietnam utan är i sitt naturliga utbredningsområde konstant insvept i tunga moln och dimma.
Ge en skuggig placering och intermediära temperaturer året runt, ner till nio grader under vintern. Odla i en väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattningen och sänk temperaturen under fyra till sex veckor tidig vinter för att inducera blomningen.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium gratrixianum// Mast. (1905) nom. illeg.
//Cordula gratrixiana// Rolfe (1912)
//Paphiopedilum villosum// var. //gratrixianum// Braem (1988)
__Heterotypic Synonyms:__
//Cypripedium gratrixianum// B.S.Williams (1897)
//Paphiopedilum gratrixianum// var. //daoense// Aver. (2002)
//Paphiopedilum gratrixianum// var. //cangyuanense// Z.J.Liu & L.J.Chen (2010)
//Paphiopedilum gratrixianum// var. //christensonianum// Perner & Koopowitz (2013)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphgratixianum.htm]] 2015-05-15
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/gratrixianum/index.html]] 2015-05-15
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_gratrixianum]] 2015-05-15
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092423]] 2015-05-15
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:147107]] 2015-05-15
[[Uppsala linneanska trädgårdar|http://www.botan.uu.se/pdf/2009/V3.pdf]] 2015-05-15











!Allmänt och utbredning
//Trias disciflora// är en liten, varmväxande epifyt som påträffas i ständigtgröna och fuktiga låglandsskogar från Arunachal Pradesh i nordöstra Indien till Thailand, Laos och Vietnamn under 1500 meters höjd.
Sitt artnamn, //disciflora//, har den fått på grund av sin skivformade läpp.

!Utseende
De bildar en låg, tät matta med upptill två cm stora, klargröna, kulformade pseudobulber. Varje bulb bär ett ensamt, elliptiskt, suckulent blad. Under tidig vår kommer blomstängeln som bär en ensam blomma. Blommorna hos //Trias disciflora// tillhör de största och mest uppseendeväckande inom hela släktet. De blir upptill två cm i diameter med en ljusröd basfärg tätt översållad med purpurfärgade prickar. Läppen är stor och mörkt röd med finare prickar. Blomman har en svag och inte helt oangenäm doft.

!Skötsel
De behöver en varm, skuggig växtplats med hög luftfuktighet och jämn vattning året om för att trivas. Under vintervilan kan de hållas något mindre fuktig, men inte torra. Håll en god luftcirkulation för att minska risken för svampangrepp.
Odla dem monterade eller i krukor med en mix av sphagnum och fin barkkompost.

!Synonymer
__Homotypic Synonyms:__
//Bulbophyllum disciflorum// Rolfe (1895)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/triasdisciflora.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Trias_disciflora]]
[[The Beauty of Orchids & Flower|http://www.orchids-flowers.com/orchids/trias-disciflora-rolfe-1896/]]






















''Etymology:'' 
From the Greek kodon, a small bell or cowbell, and Orchis, a genus of the same family, in reference to the shape of the appendages present on the labellum.


















































!Allmänt och utbredning
Den är endemisk för de västra sluttningarna av Anderna, men lokalt kan arten var allmän där den växer i västra Ecuador till norra Peru, mellan 1600 och 3000 meters höjd över havet.

!Utseende
Det är en liten orkidé utan pseudobulber men med kraftiga, upprätta blad. Från den underjordiska stammen kommer bladen ett och ett. Dessa är vid basen omslutna av två eller tre skyddsblad.
Under februari till april kommer från basen av bladet en upprätt blomstängel som kan bli tre dm hög. På stängeln kommer tre till nio ljust gröna eller rosa blommor beströdd med markeringar och fläckar i rött och purpur. Blommorna slår ut över bladen ungefär samtidigt.

!Skötsel
Den föredrar en sval placering. Den kan odlas i svagt ljus, monterad eller i en kruka med vitmossa runt rötterna. Den får aldrig tillåtas torka ut helt.

!Synonymer
__Homotypic Synonyms:__
//Spilotantha polysticta// Luer (2006)
__Heterotypic Synonyms:__
//Masdevallia huebschiana// Kraenzl. (1921)
//Masdevallia spathulifolia// Kraenzl. (1925)
//Masdevallia polysticta// subsp. //spathulifolia// Luer (1988)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maspolysticta.htm]]
[[Orchid Online|http://www.orchidsonline.com.au/interactive/node/3185]]
[[Orchidés en Nord|http://www.orchid-nord.com/Masdevallia/Masdevallia_polysticta/masd_pol.htm]] bilder











































































































!Allmänt och utbredning
Det är ett litet men utspritt asiatiskt släkte med endast <$view field="count"/> mykoheterotrofa arter som förekommer som rankor på trädstammar i låglänta tropiska skogar från nordöstra Indien och östra Himalaya österut till Japan och söderut till Java och Filippinerna. De är helt beroende av saprofytiska svampar, svampar som bryter ned döda växtdelar, för att erhålla sin organiska energi.
Namnet kommer med hänvisning till färgen på stammarna, från grekiskans ''erythros'' som betyder "röd" och ''orchid'' som betyder "formad som en testikel" efter de först beskrivna europeiska orkidéernas rötter.

!Utseende
Det är terrestriska, klättrande rankor som kryper fram över trädstammar och fäster sig vid ytan med rötterna. Den tunna, förgrenande stammen kan bli mer än sex meter, är rödbrun eller gulbrun med en kort, köttig, ogrenad rot och ett litet, fjälliknande, brunt blad vid varje nod längs stammens hela längd. Längs de översta delarna av stammarna kommer under vår och sommar en klase med många små blekt gulgröna, två eller tre cm stora, sött doftande blommor. Blommorna öppnas en eller två i taget och blomställningen försätter växa och producera nya, kortlivad blommor under flera veckor. Sepalerna är fria, utdraget ovala, den dorsala sepalen är upprätt och framåtlutande. De laterala petalerna liknar sepalerna men är något smalare. Den rörformade läppen har flera parallella åsar. Frökapseln liknar en ärtskida, lång och smal, innehållande talrika vingförsedda, vindspridda frön.

!Skötsel
Eftersom de är beroende av en svamp för sin organiska näring är det antagligen mycket svårt att odla den utanför sitt naturliga utbredningsområde, utom möjligen i samband med odling av shiitakesvamp där den kan uppträda nästan som ett ogräs.
De återfinns vanligen i delvis skuggade, öppna skogsmarker i anslutning till döda trädstammar eller död ved. De långa, blommande stammarna utgör endast en bråkdel av den totala massan av dessa orkidéer, som producerar ett betydande system av grenade underjordiska stammar och rötter. Med tanke på deras storlek och saprofytiska liv måste de kräva en betydande mykorrhiza värd.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Eo. altissima|2db0556f-0bed-4242-bb0b-f765001d8363]]// Blume (1837)

----
''Uttal''
er-rith-ROR-kis

----
''Synonymer''
__Heterotypic Synonyms:__
//Haematorchis// Blume (1849)
//Ledgeria// F.Muell. (1859)

!Rekommenderad läsning
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=112178]] 2015-12-28
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:72253]] 2015-12-28

;Dearnaley, John, 2006
://The fungal endophytes of //Erythrorchis cassythoides// - is this orchid saprophytic or parasitic?//
:Australasian Mycologist 25 (2): pp. 51-57. ISSN 1441-5526
:http://eprints.usq.edu.au/1460/2/Dearnaley_PV.pdf
















































































!Allmänt och utbredning
//Cypripedium// är ett släkte med <$view field="count"/> härdiga arter utbredda över stora delar av norra halvklotet, med de flesta av arterna norr om den 30'e breddgraden, inklusive större delen av Europa, med endast en art, Ryssland, Kina, Centralasien, Kanada USA, Mexiko och Centralamerika. Vissa arter växer på tundran i Alaska och Sibirien, vilket är en ovanligt kall livsmiljö för orkidéer. Andra arter förekommer till och med i tropiska områden, som Honduras och Myanmar/Burma. Några av de nordliga arter klarar extrem kyla, växer under snön och blommande när snön smälter.
De eurasiska arterna med gula eller röda blommor bildar en grupp skild från de nordamerikanska arterna med gula blommor. Den mexikanska ''Pelican Orchid'', //[[Cyp. irapeanum|15041782-395a-403d-bcdd-292d26d33618]]//, och Kaliforniska guckuskon, //[[Cyp. californicum|da90bd9c-089d-4bfd-873b-023db906f2c5, delar flera likheter med sin systergrupp //[[Selenipedium|c4ef2d0f-50ab-449c-b861-30b4379c3318]]// och är förmodligen de första som avvek från den släktlinjen. 
Namnet //Cypripedium// härstammar från det latinska ''cypris'' som kommer från forngrekiskans ''kypris'', en tidig referens i grekiska mytologin till Afrodite, och det grekiska ''pedilon'' som betyder //sandal//.

!Utseende
Släktet innehåller allt från plantor praktiskt taget utan bladstängel och med bara två eller tre blad tätt intill marken till plantor med många blad på en lång stängel. Höjden varierar från tio cm som //[[Cyp. margaritaceum|ad6c8617-204f-4365-943b-caf019b197bd]]// till en bra bit över metern som //[[Cyp. subtropicum|b88c1cde-0bd6-420b-999b-f916426f2e08]]//. De saknar pseudobulber utan som med de flesta markväxande orkidéer är rhizomet kort och robust, växande i det översta markskiktet. Rhizomet växer årligen med en tillväxtknopp i ena änden och dör av vid den andra änden. Från en knoppen vid spetsen av rhizomet kommer en upprätt stam med blad längs hela dess längd. Undantaget är den rosa guckuskon, //[[Cyp. acaule|21607915-93a6-4c0b-b02b-0085b74d2ddf]]// som har en kort underjordisk stam med blad som växer upp ur jorden. De ofta håriga bladen kan variera från ovala till elliptiska eller lansettlika, med en tydlig nerv längs hela sin längd. 
Blomställningen kan bära en till tolv blommor, som hos //[[Cyp. californicum|da90bd9c-089d-4bfd-873b-023db906f2c5]]//, men de flesta arter har en till tre blommor. Vanligtvis har sepaler och petaler likartade färger medan läppen avviker. Blommans läpp har den karaktäristiska toffelformen som givit släktet dess namn.

!Skötsel
De föredrar en kall eller sval placering i skugga utan direkt sol. Stora plantor tål mer ljus men blommorna kan brännas även om bladen klara sig.
Plantering av //Cypripedium// bör helst ske när plantan är i vila, bästa tiden är från september till april. Det går även att plantera under övrig tid, men man utsätter då plantan för större belastningen och stör tillväxten det första året. De behöver en genomsläpplig, väldränerad sandblandad jord som aldrig torkar ut. Använd aldrig en alltför kraftig lerjord. Små plantor är ömtåliga för torka, stora plantor har stort rotsystem och klarar tillfällig torka bättre. Står de ständigt blöta ruttnar nästan ovillkorligen plantan. På friland kan en upphöjd odlingsbädd vara ett bra alternativ. 
Om man odlar i kruka måste man förvara plantorna frostfritt över vintern. På friland är många arter härdiga, men säkrast är att täcka med granris på vintern. Vissa arter är känsliga för blöta vintrar och kan med fördel täcka med frigolitlådor som både isolerar och skyddar mot väta. Med rätt art, eller hybrid, kan släktet odlas utomhus i större delen av Sverige.

!Taxonomi
''Underfamilj'': Cypripedioideae ''Tribus'': Cypripedieae ''Undertribus'': Cypripediinae

----
''Typart''
//[[Cyp. calceolus|a6c5f084-29df-4579-bfbb-78baa2667b6d]]// Linnaeus (1753)

----
''Uttal''
sip-re-PEE-dee-um

----
''Synonymer''
__Heterotypic Synonyms:__
//Calceolus// Mill. (1754)
//Calceolaria// Heist. (1763) nom. illeg.
//Criogenes// Salisb. (1814)
//Schizopedium// Salisb. (1814)
//Criosanthes// Raf. (1818)
//Arietinum// L.C.Beck (1833)
//Sacodon// Raf. (1838)
//Hypodema// Rchb. (1841)
//Ciripedium// Zumagl. (1859)
//Cypripedilon// St.-Lag. (1889)
//Fissipes// Small (1903)

!Rekommenderad läsning
[[Lidaforsgården|http://www.lidaforsgarden.com/Orchids/cypripedium_sv.htm]] 2015-11-19
[[OrchidéHuset|http://orchidehuset.se/index.php/cypripedium]] 2015-11-19
[[Wikipedia|https://en.wikipedia.org/wiki/Cypripedium]] 2015-11-19
[[OrkidéPrat|http://www.neovita.com/orkideer/no.cgi?gem=visaArtikel&postid=202994]] 2015-11-19
[[Laneside Hardy Orchids|http://lanesidehardyorchids.com/catalog/cypripedium.php]] 2015-11-19







!Allmänt och utbredning
Det är en epifytisk art från Mexiko söderut till Honduras som växer vid lägre elevationer i fuktiga molnskogar. Den växer också terrestriskt i barrskogar upptill 2500 meters höjd.

!Utseende
Det långa, krypande rhizomet bildar ovala pseudobulber krönt av ett ensamt blad.
Under tidig vår kommer en kort blomstängel från basen av en fullväxt bulb, toppad med klasar av små blommor. Blommorna är variabla i färg och sträcker sig från rent vita till purpurröda och djupt rödbruna. De doftande blommorna är ganska små, bara cirka fem mm stora.

!Skötsel
Dess krypande växtsätt gör att den med fördel odlas monterad, eller i en hängande korg. Den föredrar svalare förhållande, men den kan tolerera varmare placeringar också.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria densa// Lindl. (1836)
__Heterotypic Synonyms:__
//Maxillaria glomerata// Galeotti nom. inval.

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/maxdensa.htm]]
[[the Orchid Photo page|http://www.orchidworks.com/orchids/2005/Max_densa_c.html]]
[[Abundaflora|http://www.abundaflora.com/max_dens.htm]] bild
[[lize Botanic Gardens|http://www.belizebotanic.org/orchid.jsp?name=Maxillaria%20densa]] bild









!Allmänt och utbredning
Det finns <$view field="count"/> accepterade epifytiska, litofytiska och, undantagsvis, terrestriska arter i släktet. De växer i regnskogsområden från sydöstra Asien till Nya Guinea, Borneo och Filippinerna. 
Den välkända botanikern C. L. Blume beskrev släktet för första gången redan 1825.
Namnet kommer från grekiskans ''dendron'', "träd", som hänsyftar till deras epifytiska livsstil, och ''cheilos'' för "läpp" som anspelar just på blommans läpp.

!Utseende
Pseudobulberna bildar mattor på krypande rhizom, är ovala till cylindriska och bär ett eller två smala, avlånga blad från toppen av varje bulb.
Blomstängeln blir lång, upprätt och hängande. Blommorna är små och kommer alternerande organiserade på den trådlika stängeln, påminnande om en kedja. Deras blommor varierar i färg över rosa, gult, grön till vitt.
Trots att //Dendrochilum// ofta är plantor som växer i bergiga områden, är de väldigt adaptiva och inte alls speciellt svåra att odla.

!Skötsel
De odlas bäst i hängande krukor, tråd- eller träkorgar. De föredrar svala till varma förhållanden och hög luftfuktighet med ordentlig luftcirkulation, men inte drag eller kallras. Till och med under vintern kan man försöka hålla temperaturen över 25 grader. De bör skuggas eftersom bladen lätt bränns av alltför stark sol, speciellt under sommarmånaderna bör de hållas undan direkt solljus. Under vintern behöver de allt ljus de kan få. Ge den en kort viloperiod utan vatten under två veckor efter att plantan har blommat över. Övrig tid på året hålls de fuktiga utan att helt tillåtas torka ut. Under vintern räcker det med en gång i veckan. Håll koll på komposten så den inte blir sumpblöt då rötterna lätt börjar ruttna. Under de varmare månaderna kan de behöva vattnas varannan till var tredje dag, låt inte komposten torka ut helt mellan vattningarna. Efter blomningens slut kan en svag kväverik gödning med varannan vattning hjälpa till att producera kraftiga pseudobulber. När bulberna börjar bli fullväxta kan en svag fosfatrik gödning gynna nästa blomning. När väl bulberna är färdiga kan gödningen upphöra helt för upp till sex veckor under plantans viloperiod.
I regel ogillar //Dendrochilum// att omplanteras, så välj odlingsmedium noggrant så de inte behöver flyttas ofta. Var tredje år kan vara lagom. De är känsliga för en alltför nedbruten kompost och påverkas snabbt. Om de visar tecken till att inte må bra, ta ur dem ur krukan, rensa rötterna från all gammal kompost och plantera om i en kruka som är precis tillräckligt stor för de nästa årens tillväxt. En fin barkkompost som tillåter bra dränage och luftcirkulation samtidigt som den ger ett bra stöd är det bästa alternativet.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Coelogyneae
''Undertribus'': Coelogyninae

''Typart''
//[[Ddc. aurantiacum|ae28a30b-bbf2-4a03-ac33-b2634fc8c749]]// Blume (1825)

''Uttal''
den-droh-KYE-lum 

''Synonymer''
__Heterotypic Synonyms:__
//Acoridium// Nees & Mayen (1843)
//Platyclinis// Bentham (1881)
//Basigyne// J.J.Smith (1917)
//Pseudacoridium// Ames (1922)

!Rekommenderad läsning
[[Vivis OrchidCorner|http://viviorchids.com/orcnr-88.html]]
[[Dragon Agro|http://www.dragonagro.com/dapdendr.htm#Dendrochilum]]
[[Macara Orchids|http://www.geocities.com/macaraorchids/DendrochilumCulture.html]]
[[Dendrochilum|http://www.dendrochilum.com/]]

























!Allmänt och utbredning
Släktet innehåller <$view field="count"/> miniatyrarter och en naturhybrid, //Isblia// × //pabstii//, mellan //[[Isblia. pulchella|f10f432e-ac53-4a8e-b5b9-1f54ea3455a6]]// och //[[Isblia. violacea|cc3ed76e-5f9a-4306-8267-616ba6eea811]]//, som bara är känd från en enda växtplats i delstaten Paraná, i södra delen av Brasilien. De växer alla epifytiskt eller mer sällan litofytiskt i fuktiga, atlantnära skogar från norra delen av delstaten Bahia i Brasilien till Argentina mellan havsnivå och upptill 1500 meters höjd.
Den första arten av //Isabelia// som upptäcktes var //[[Isblia. virginalis|cb4b965e-ebff-4cb2-9fba-b7251826fde1]]//. Den samlades in i Serra dos Órgãos, Rio de Janeiro och skickas till Europa av George Gardner 1837. Då betraktades den som en möjlig //[[Maxillaria|54758670-0166-4014-8c61-7fdf63c69492]]//. Trots att den varit känd länge, förblev den av någon okänd anledning utan formell beskrivning och vetenskapligt namn fram till 1877, när João Barbosa Rodrigues hittade flera exemplar av den i Caldas, Minas Gerais, på träden runt hyggen i regnskogen. 
Den första art som formellt beskrivs var //Sophronitis violacea//, av John Lindley 1840. Det är en mycket kort beskrivning där han nämner att den inte har röda blommor som de andra arterna inom //Sophronitis//.
Enligt Cássio van den Berg, som studerade deras släktskap, är //Isabelia// nära besläktad med de små släktena //[[Pseudolaelia|aac7b1ae-1b22-438f-b3d2-f1d7326c502d]]// och //[[Constantia|f17b7da6-2b84-441f-9225-6d6b44fe01fd]]// och att alla tre bildar en systergren till en annan liten gren som innehåller //[[Leptotes|167ccdad-9930-46bd-a033-ba5a796627ec]]// och //[[Loefgrenianthus|b5bf8a2e-305c-4e03-8ebc-ecb4997cb62d]]//.  De två grenarna utgör Isabellia-alliansen, som bildats av arter med kraftiga könspelare, ibland delvis sammanväxta med läppen och bildar en rund nektargömma, och är en av de åtta undertyperna av undertribus Laeliinae.
Under mer än ett sekel var //Isabelia// ett släkte som bildades av en enda art, men 2001 föreslag Cássio van den Berg och Mark W. Chase att //Neolauchea// och //Sopronitella// skulle slås ihop med //Isabelia//.
Namnet på detta släkte är en hyllning till [[prinsessan Isabel de Alcantara av Brasilien|http://sv.m.wikipedia.org/wiki/Isabella_av_Brasilien]], enda dotter till Dom Pedro II, kejsare vid tiden då Barbosa Rodrigues publicerade sin bok.

!Utseende
Även om de tre arterna delar flera morfologiska egenskaper är de mycket olika varandra och mycket lätt att identifiera, både genom de vegetativa egenskaper eller särdrag på sina blommor. Trots att alla arter idag ingår i samma släkte föredrar många orkidésamlare och vissa taxonomer de gamla namnen.
//[[Isblia. pulchella|f10f432e-ac53-4a8e-b5b9-1f54ea3455a6]]// är den enda arten med ett långsträckt rhizom och får därför mycket åtskilda pseudobulber med en till en och en halv cm mellanrum och mycket långa, smala blad. Den har fyra polliner.
Den tidigare //Sophronitella//, nu //[[Isblia. violacea|cc3ed76e-5f9a-4306-8267-616ba6eea811]]//, är den största arten med ett kort rhizom, mer robusta och upprättstående pseudobulber och nästan platta, läderartade blad. Denna art är den enda att producera mer än en blomma per blomställning, ibland upp till tre. Blommorna är de mest öppna av arterna, med sepaler och petaler av liknande form. Blommans färg och form är anmärkningsvärt konstant i denna art och bara några exemplar av alba-formen har hittats sedan den upptäcktes. Den har en fri läpp och åtta pollinia.
Typarten //[[Isblia. virginalis|cb4b965e-ebff-4cb2-9fba-b7251826fde1]]// bildar korta, krypande rhizom med små pseudobulber och blad som är nästan runda i genomskärning och täcks helt av torra, fibrösa täckblad. Läppen är delvis sammanvuxen med könspelaren och bildar en nektargömma. Blommorna är alltid ljusrosa, nästan vita, och har åtta polliner.
Alla arterna har äggformiga till spolformiga pseudobulber med en eller två avlånga läderartade blad i toppen. Från toppen av bulben kommer under tidig höst till tidig vinter också en kort blomstängel med en enda blomma som håller ungefär en vecka, men man vet inget om vilka som är deras pollinatörer. Sepaler, petaler och läpp har alla samma färg som kan vara vitt, ljusrosa eller magenta. Sepalerna är brett elliptiska eller ovala medan petaler vanligen är smala och avlånga eller ovala. Könspelaren är mörkare än resten av blomman och kan ha fyra eller åtta polliner.

!Skötsel
I sina naturliga habitat växer de på trädstammar och grenar där de vanligen utsätts för hög ljusinstrålning med mycket luftfuktighet och luftcirkulation.
De är inte så lätta att odla men kan monteras eller odlas i grunda skålar med stenkross. De behöver mycket vatten och ljus under tillväxten men rötterna bör inte vara fuktiga under natten så vattning under morgonen är att föredra. Eftersom de inte tycker om att störas är det bäst att lämna utrymme för fem års tillväxt vid omplanteringen. 

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[Isblia. virginalis|cb4b965e-ebff-4cb2-9fba-b7251826fde1]]// Barb.Rodr. 

''Uttal''
iz-a-BELL-ee-a

!Synonymer
__Heterotypic Synonyms:__
//Neolauchea// Kraenzl. (1897)
//Sophronitella// Schltr. (1925)
//Isanitella// Leinig (1971)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Isabelia]]
[[American Orchid Society|http://www.aosforum.org/pdf/Genus_Isabelia.pdf]]
















!Allmänt och utbredning
De växer i lövkomposten under skuggande träd eller mosstäckta kalkstensklippor mellan 700 och 1800 meters höjd i nordöstra Indien och Burma. 
Den första representanten av arten insamlades av mr Simon och skickades till England 1857.
Artepitetet kommer från latinets ''hirsutus'' som betyder "hårig" och anspelar på blomstängeln och själva blomman.

!Utseende
Det är en medelstor planta vars totala höjd inte överstiger 35 cm. Den har fem till sju stycken, upptill 45 cm långa och två cm smala blad som är enfärgat gröna på ovansidan och prickiga med purpur på undersidan. Arten är lätt att särskilja från andra arter med sina ganska håriga blommor och blomstänglar. Den gröna blomstängeln är tätt beklädd med mörkt purpurfärgade hår. Den blir 30 cm lång och bär endast en blomma. De tio cm stora blommorna har rundade, paddelformade petaler med en ihoprullad övre kant och färgen går från gyllenbrunt till lysande violetta spetsar. Blommorna kommer mellan vår och höst på tre år gamla skott. I naturen kan gamla, ostörda plantor ha mer än 20 mogna skott med var sina blommor!
Det finns även en //alba// form som helt saknar den röda pigmenteringen i blommorna.

!Skötsel
Vintrarna så nära Himalaya som plantorna av arten växer, kan bli så kalla som ner till tio plusgrader och sommrarna upptill 40 grader varma. I dess naturliga habitat är november till mars de torraste månaderna och maj till september de våtaste med en normal temperatur mellan elva till 22 grader.
I odling gynnas de av ljus halvskugga, regelbunden duschning och ordentlig vattning under de varma sommarmånaderna. Håll komposten jämnt fuktig med vattning var fjärde till var femte dag under sommaren och minskad vattning under vintern. För att inducera blomning, vattna rejält under sommar och höst, sänk därefter temperaturen och vattna inte under en månad.
De klarar många olika medium så länge de är väldränerande, som till exempel en medelgrov barkkompost med perlite.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium hirsutissimum// Lindley (1857)
//Cordula hirsutissima// Rolfe (1912)
__Heterotypic Synonyms:__
//Paphiopedilum esquirolei// Schlechter (1919)
//Cordula esquirolei// Hu (1925)
//Paphiopedilum chiwuanum// Tang & F.T.Wang (1951)
//Paphiopedilum hirsutissimum// var. //esquirolei// K.Karas. & K.Saito (1982)
//Paphiopedilum hirsutissimum// var. //chiwuanum// P.J.Cribb (1987)
//Paphiopedilum saccopetalum// H.S.Hua (1998)
//Paphiopedilum hirsutissimum// f. //viride// O.Gruss & Roeth (1999)
//Paphiopedilum esquirolei// var. //chiwuanum// Braem & Chiron (2003)
//Paphiopedilum hirsutissimum// f. //alboviride// O.Gruss & Koop. (2006)

!Rekommenderad läsning
[[the Canadian Orchid Congress|http://www.canadianorchidcongress.ca/Ingrid/PaphHirsu.html]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphhirsutissimum.htm]]
[[Orchid Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_hirsutissimum]]
!Allmänt och utbredning
//Brassavola nodosa// är en liten till medelstor varmväxande epifyt och lithofyt som växer i torra och soliga områden från havsnivå upp till 500 meters höjd i Mexiko, Centralamerika, Colombia och Venezuela. Denna art är utbredd i Mexiko längs Mexikanska golfens kust söderut från Tampico och växter också längs Stillahavskusten i delstaten Chiapas. Habitatet fortsätter söderut genom Centralamerika, samt både Stilla havet och Karibiens kuster, och sträcker sig in i norra Venezuela och Colombia. Den har också rapporterats på öarna i Västindien. Den växter framförallt i lågt belägna kustområden, i allmänhet under 500 meters höjd, antingen på träd i låglänta tropiska skogar och mangroveträsk, eller på utsatta stenar och klippor nära stranden. Eftersom den lever ner till havsnivå är den ganska salttolerant.
//B. nodosa// är nära besläktade med arterna i //[[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]//. Kromosomtalet är 2n=40.
Arten pollineras av nattaktiva malar med långa sugsnablar.

!Utseende
Istället för pseudobulber har de en kort stam täckt med ett tunt pergamentliknade täckblad upp runt bladbasen. Varje stam bär ett enda, upprätt, cylindriskt pennliknande blad i blågröna färger. Bladen har en grund fåra längs bladets översida. De kan bli mer än fyra dm långa men är vanligen betydligt kortare. Varje skott kommer med korta mellanrum på jordstammen och etablerade plantor bildar vanligen flera stammar. På så sätt bildas snabbt en stor planta. 
De hållbara blommorna i vita och ljusa krämfärger kommer mellan januari och mars och håller en eller två månader. Den doftar behagligt svagt av citrus eller liljekonvalj, framför allt på kvällen fram till midnatt. Den två dm lång blomstängel kommer från de nyligen mogna bulberna och var och en bär upptill sex blommor som blir runt tio cm stora. Sepaler och petaler är långa och smala och varierar i färger från ljust grönt och gulaktigt till nästan rent vitt. Den stora, vita läppen är rörformade med purpurfläckar mot basen.

!Skötsel
Den kräver ganska hög luftfuktighet och som arterna från släktet //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, mycket ljus, 25000 till 35000 lux. Under vår och sommar är det bra med bara ett lätt skuggat söderfönster. De kan tolerera mer ljus om de introduceras långsamt. När ljuset är starkt behövs mer vatten och luftcirkulation, och vattnet bör hållas från bladen under de ljusaste delarna av dagen för att inte bränna bladen. Naturligt växer dessa plantor i torra och soliga områden. Deras tjocka blad är ett sätt att klara dessa förhållanden. De kräver därför full sol under oktober till februari, den period då plantan inte är i aktiv tillväxt. Under denna period behöver den en eller ett par månader med minst två veckor då plantan inte vattnas utan bara duschas med jämna mellanrum. I sitt naturliga habitat har plantorna hög luftfuktighet och en ordentlig temperatursänkning på natten som ger en riklig dagg, så plantorna torkar aldrig ut helt. Under vilotiden föredrar de en temperatur mellan 15 till 18 grader för en bra knoppsättning, under tillväxtcykeln kan temperaturen gärna gå upp till 28 grader under dagen och sju till tio grader lägre under natten. Trots att plantorna är varmväxande kan de adaptera till en rad olika förhållanden. Många odlas svalare under vintervilan, 14 till 16 grader, men de kommer inte att blomma om temperaturen hålls under elva grader. Om plantorna odlas under svala förhållanden är det extra viktigt att de hålls torra.
Under den varmaste årstiden då tillväxten sker behöver de vattnas varannan till var tredje dag. Under samma tid bör man göda med en fjärdedels till halva den rekommenderade dosen varje vecka. Många odlare använder en gödning med låg kvävehalt och hög fosfathalt under hösten för att stimulera knoppsättning och nästa års blomning. Någon gång i månaden är det bra att skölja igenom komposten med rent vatten för att förhindra saltuppbyggnad. Vattna plantorna normalt, vänta någon timme och skölj igenom komposten med dubbla krukvolymen med rent vatten.
Omplanteringen bör ske just när de nya rötterna börjar tillväxa. Odlingsmediet måste vara en öppen, väldränerad kompost som grov bark, kork eller trädormbunke för att tillfredsställa en tillräcklig hög vattenregim. De kan odlas monterad om luftfuktigheten kan hållas tillräckligt hög och om de kan vattnas minst en gång om dagen under sommaren. Under omplanteringen är det lätt att föröka plantan för nya delningar.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum nodosum// Linné (1753)
//Cymbidium nodosum// Sw. (1799)
//Bletia nodosa// Rchb.f. (1862)
__Heterotypic Synonyms:__
//Brassavola rhopalorrhachis// Rchb.f. (1852)
//Bletia rhopalorrhachis// Rchb.f. (1862)
//Brassavola nodosa// var. //rhopalorrhachis// Schlechter (1919)
//Brassavola scaposa// Schlechter (1919)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/brassavolanodosa.htm]]
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS231.html]]
[[OrkidéPrat|http://www.neovita.com/orkideer/no.cgi?gem=visaArtikel&postid=204399]]
[[Cattleya Source|http://cattleya.wikidot.com/brassavola-nodosa]]















!Allmänt och utbredning
Arten återfinns terrestriskt eller mer sällan litofytiskt i skogar på kalkstensklippor mellan 600 och 1000 meters höjd i Myanamar, Vietnam, Lower Thailand, Malaysia, Sumatra, Borneo och Sulawesi.
Den upptäcktes nära Moulmein 1846 av Lobb, en insamlare anställd av Messrs. Veitch & Son, London, England.

!Utseende
Pseudobulberna är ljust grågröna med breda, ljusgröna blad som har tydliga nerver på undersidan. Bladen, som kan bli upptill 40 cm långa, fälls under vintervilan.
Under vintern kommer en upptill 90 cm lång, upprätt blomstängel som sträcker sig mot ljuset och bär sex till 15 tunna, hållbara blommor. Blommorna är fem till sju cm stora, med sepaler och petaler färgade i rent vitt med fläckar i klarrött i mitten av läppen, alldeles framför könspelaren.

!Skötsel
Den behöver en torr och sval vintervila efter att bladen gulnat och fallit av. När den blommat klart, plantera om och vänta på att de nya skotten är helt etablerade med nya rötter och bladen börjar öppna sig på våren innan vattningen återupptas som vanligt. Under vintern behövs bara en mycket lätt vattning så att jorden inte blir helt uttorkad. Under sommaren vill de ha en fuktig men inte blöt kompost och bara lätt uttorkning mellan vattningarna.
Trots att det är en tropisk art kan den klara temperaturen ner mot nollgradigt utan att ta skada. Eventuella blommor kommer att vissna men bulberna klarar sig. Den kan också klara nästan full sol och temperaturer på mer än 30 grader. För bästa utvecklingen av blommorna krävs en ljus och luftig växtplats.
De odlas bäst i grunda krukor eller skålar där halva utrymmet upptas av dränering. Ovanpå dräneringen, grus eller leca, läggs ett lager sphagnum innan en sandig kompost av torv och halvmultnad löv fyller upp krukan.

!Synonymer
__Homotypic Synonyms:__
//Preptanthe vestita// Rchb.f. (1853)
//Phaius vestitus// Rchb.f. (1867)
//Alismorkis vestita// Kuntze (1891)
__Heterotypic Synonyms:__
//Cytheris griffithii// Wight (1851)
//Amblyglottis pilosa// de Vriese (1855)
//Calanthe pilosa// Miquel (1859)
// Calanthe vestita// var. //lutea// B.S.Williams (1862)
//Calanthe vestita// var. //rubra-oculta// B.S.Williams (1862)
//Calanthe masuca// var. //luteo-oculta// B.S.Williams (1871)
//Calanthe masuca// var. //nivalis// B.S.Williams (1871)
//Calanthe vestita// var. //turneri// B.S.Williams (1871)
//Calanthe vestita// var. //igneo-oculata// Rchb.f. (1876)
//Calanthe barberiana// Rchb.f. (1881)
//Calanthe regnieri// Rchb.f. (1883)
//Calanthe stevensiana// Regnier (1883)
//Calanthe turneri// Rchb.f. (1883)
// Calanthe vestita// var. //williamsii// T.Moore (1884)
//Calanthe turneri// var. //nivalis// B.S.Williams (1885)
//Calanthe vestita// var. //oculata-gigantea// Rchb.f. (1885)
//Calanthe williamsii// B.S.Williams (1885)
//Calanthe inquilinax// Rolfe (1887)
//Calanthe darblayana// God.-Leb. (1889)
//Calanthe augusti-reigneri// auct. (1894)
// Calanthe stevensii// B.S.Williams (1894)
//Calanthe vestita// var. //oweniana// B.S.Williams (1894)
//Calanthe hennisii// Loher (1909)
//Calanthe vestita// var. //sumatrana// Schlechter (1911)
//Calanthe melinosema// Schlechter (1925)
//Calanthe padangensis// Schlechter (1934)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/calanvestita.htm]]
[[Orchids and More From Tom|http://www.websitesbytom.com/orchids/calanthe_care.html]]
[[Orchids.co.in|http://www.orchids.co.in/orchid-plant/calanthe-vestita.shtm]]


























!Allmänt och utbredning
Det är en sällsynt art endemisk för berget Halcon på den filippinska ön Mindoro där den växer terrestriskt i djup skugga i mossan och lövkomposten som samlas mellan stenar och klippor på skogens bottenskikt i fuktiga låglandsbergsskogar från 400 till 800 meters höjd. Den är endast känd från en lokal med mindre än 50 vuxna individer. Den är i dagsläget nära utrotning då den minskat med 95% de senaste decennierna på grund av nedtrampning, skogsskövling och svedjebruk.
Arten namngavs för att hedra fru Jacinta Urban Tecson, en filippinsk orkidéodlare. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Chloroneura. Kromosomtalet är 2n=40.

!Utseende
Det är en liten art med fyra till sex långsmala blad, upptill 20 cm långa och fyra cm breda, mönstrade i ljust och mörkt grönt. Under vintern till våren kommer en upptill 25 cm lång blomstängel som bär en ensam, tio cm stor, blomma. Läppen är orangeröd och petalerna gröna mot basen med en mörk purpurton på den yttre halvan mot spetsen med mörkt vinröda prickar mitt på. Den dorsala sepalen är ljusgrön med vita kanter och många mörkgröna längsgående ränder. Blommorna kan hålla upptill tre månader.

!Skötsel
I sitt naturliga, begränsade, utbredningsområde utsatt den för kraftiga regn under vinter, våren och sommaren. Hösten är fuktigt och våren är den varmaste säsongen. Ge den en växtplats med hög luftfuktighet, måttligt starkt ljus, 8000 till 16000 lux, och intermediära till varma temperaturer. Odla i en väldränerad mix av medelgrov barkkompost och perlit. Använd små krukor med rum för ett eller två års tillväxt, inte större. Plantera om på våren när de nya skotten börjar komma. Vid delning, lämna minst tre skott i varje delning för snabbast tillväxt.
Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning behövs minst tre veckor under senvintern med minskad vattning och lägre temperaturer.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum urbanianum// f. //alboviride// Braem (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphurbanianum.htm]] 2015-08-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_urbanianum]] 2015-08-28
[[Antec Laboratory & Ladyslipper Farm Page|http://www.ladyslipper.com/0314-04.htm]] 2015-08-28
[[Slipperorchid.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/urbanianum/index.html]] 2015-08-28






































!Allmänt och utbredning
Den här epifytiska miniatyrarten växer i delstaten Antioquia i Colombia, mellan 1000 och 2500 meters höjd.

!Utseende
Plantan får äggrunda pseudobulber som är tillplattade från sidan, två cm långa och en cm bred. Bulberna är delvis dolda av långa täckblad som är vikta längs hela sin längd. Från toppen av bulben kommer ett ensamt, långsmalt blad. Hela plantan blir fyra till sju cm hög. Under våren och sommaren kommer från bladfästet på de nyligen mogna bulberna en tunn, upprätt blomstängel, nästan lika lång som bladen, med några glest placerade, knappt centimeterstora blommor, som öppnas successivt. Blommorna är stjärnformiga i ljust gulgrönt med rödbruna markeringar mot den inre delen av sepaler och petaler.

!Skötsel
Den behöver en intermediär växtplats med hög luftfuktighet hela året. Vattna regelbundet hela året men minska vattningen något under två eller tre månader vintertid. De får inte torka ut helt, eller vara utan vatten för länge. Göd en gång i veckan under tillväxtperioden med svag dos, en fjärdedel till halva den rekommenderade dosen.
Medeltemperaturen i dess naturliga habitat under hela året är runt 25 grader dagtid och ner till 13 grader nattetid. Eftersom den har en stor spridning i naturen kan den anpassa sig till tre till fyra graders högre eller lägre temperatur.
Den föredrar en ljus växtplats utan direkt sol, runt 15000 till 23000 lux. Ge den hela tiden bra luftcirkulation.
Den kan odlas monterad eller i krukor eller mossfodrade korgar med väldränerad, fin barkkompost och kokosfibrer.

!Synonymer
__Homotypic Synonyms:__
//Roezliella cuculligera// Schlechter (1920)
//Sigmatostalix cuculligera// Garay (1972)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/sigcucciligera.htm]]








!Allmänt och utbredning
Det är en miniatyrepifyt från Colombia, Ecuador, Peru och Venezuela där den växer i molnskogar mellan 1700 och 3000 meters höjd. På Mt.Pichincha i Ecuador har den till och med påträffats ända upp till 4000 meters höjd.
Namnet kommer från latinets diminutivform av ''gutta'' så betydelsen blir "små prickar" och anspelar på blommans utseende.

!Utseende
För att vara en //[[Restrepia|a3a2cec3-61a6-4caa-a365-396d3bb1cf97]]// blir den ganska storväxt med sina upptill 25 cm. Den saknar pseudobulber utan bladstjälken kommer direkt från en underjordisk stam. Det ensamma bladet är långsmalt äggformat, sju cm långt och fyra brett. Från basen på ovansidan av bladskivan kommer vanligen under vår till höst en upptill sju cm långsmal blomstängel som bär en enda, två till fem cm stor blomma på eller över bladet. Synsepalen är gul med ränder eller täta prickar i rött, och läppen kan vara ljusgrön, vit, gulaktig, ljuslila och antingen med ränder eller prickar i röd-brun eller mörkt lila.

!Skötsel
Ge den ljus skugga eller halvskugga, mindre än 10000 lux. Den föredrar hög luftfuktighet och svala eller intermediära temperaturer, mellan sju och maximalt 30 grader under en kortare tid. Odla i en mix av fin barkkompost och perlite eller hackad sphagnum eller i ren sphagnum. Vattna regelbundet och håll komposten fuktig. Lättodlad och bildar gärna keikis. I sitt naturliga habitat är nederbörden måttlig till hög större delen av året, men under vintern finns det en period på två till tre lite mer torra månaderna. Odlade plantor bör vattnas regelbundet under perioden med aktiv tillväxt.

!Synonymer
__Heterotypic Synonyms:__
//Restrepia robledorum// Braas & Braem (1982)
//Restrepia maculata// subsp. //robledorum// H.Mohr (1996)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/restgutalata.htm]]





























































































!Allmänt och utbredning
Denna art hör hemma i ett litet område av Thailands södra övärld där den växer terrestriskt på mossbeklädda träd eller litofytiskt på kalkstensklippor från havsnivå till 30 meters höjd.
Artnamnet ''leucochilum'' betyder "med vit läpp". Den har troligen ett gemensamt ursprung med //[[Paph. godefroyae|e6b029dc-242c-4de9-bcd3-0b13fa5adfb2]]// som den länge betraktats som en form av. Emellertid är de helt isolerade från varandra och har inget överlappande utbredningsområde. Dessutom saknar läppen hos //Paph. leucochilum// helt de prickar som är så karaktäristiska för //[[Paph. godefroyae|e6b029dc-242c-4de9-bcd3-0b13fa5adfb2]]//. Taxonomiskt tillhör den undersläkte Brachypetalum.

!Utseende
Arten är känd för sitt stora rotsystem som lagrar vatten under torrperioden. Tillsammans med de hårda, vaxartad bladen är plantan väl anpassad till ett torrt klimat trots att dess naturliga utbredningsområde är fuktigt året runt. Den bildar fyra till sex mörkgröna blad som är mönstrade med ljusgröna fläckar på ovansidan och undersidan tätt beströdd med små purpurfärgade prickar eller helt purpurfärgad. Bladen kan bli upptill 14 cm långa och tre cm breda.  Under regnperioden mellan juni till augusti kommer en drygt sju cm lång blomstängel som bildar en eller två stycken sju cm stora, hållbara blommor. Blommorna är vita eller ljust gula där allt utom läppen är översållad med mörkt purpurfärgade prickar.

!Skötsel
Området där de växer utsätts för regn från slutet av våren till hösten och torra vintrar med bara duggregn och dimma från november till maj.
De bör odlas i områden med starkt indirekt ljus och intermediära eller varma temperaturer. Plantera i en väldränerad mix med barkkompost, krossad kalksten och perlit eller sphagnum. Använd helst små krukor med många hål i sidorna för att underlätta ventilationen och låter komposten torka upp snabbt efter vattningen så rötterna inte är blöta för länge. Omplanteringen görs med fördel direkt efter att blomningen är över men var lätt på hand, skotten bryts lätt isär vid omplanteringen.
Ge svag gödning ofta, ungefär en fjärdedel av den rekommenderade dosen, och skölj regelbundet igenom krukan med rent vatten av bra kvalité då de är känsliga för uppbyggnad av salter i komposten.
För att inducera blomningen, minska vattningen och sänka temperaturen i tre veckor på vintern.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium godefroyae// var. //leucochilum// Rolfe (1894)
//Paphiopedilum godefroyae// f. //leucochilum// Braem & Chiron (2003)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphleucochilum.htm]] 2015-05-26













!Allmänt och utbredning
Det är en epifytisk miniatyrart från de fuktiga molnskogarna i västra Venezuela och östra Colombia runt 1300 till 2650 meters höjd över havet.

!Utseende
De styva bladen blir 13 cm långa och mindre än en cm smala, med färger i blågröna nyanser. De upprätta bladskaften blir långa och smala så bladen hänger ner från dem. Under senvintern till våren kommer upptill sju stycken i följd, tätt tillsammans ovanpå bladskivan. De ser ut som fem mm breda guckuskominiatyrer med sepaler, petaler och könspelaren i ljust gult och läppen mörkgul.

!Skötsel
Ge den en ljus skugga utan direkt sol, 5000 till 15000 lux. Håll temperaturen över elva grader och under 26 så kommer plantan frodas. Den kan med fördel odlas monterad men det går även bra i krukor med en fuktighetshållande, porös kompostmix med mycket sphagnum. Håll komposten ständigt fuktig.

!Synonymer
__Homotypic Synonyms:__
//Zosterophyllanthos subtilis// Szlach. & Marg. (2001)
//Acronia subtilis// Luer (2005)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleursubtilis.htm]]







































































!Allmänt och utbredning
//Paph. sukhakulii// är endemisk för berget Phu Luang i provinsen Loei, nordöstra Thailand, där den växer mellan 250 och upptill 1000 meters höjd. Här kan vintertemperaturen ibland gå ner så lågt som sex grader över nollstrecket. Den växer ofta nära vattendrag i sandig humusrik lerjord blandat med lövkompost i lätt till måttlig skugga. På lägre höjder växer den ofta tillsammans med //[[Paph. callosum|58cb8f5a-cf0a-4e8f-b8f2-2e3865819dba]]//.
Arten har används för att skapa en hel del fantastiska hybrider. Det verkar som om närhelst //Paph. sukhakulii// korsas med andra arter eller hybrider inom släktet får den resulterande avkomman fascinerande och spektakulära blommor. Till dags dato har den korsats med så gott som samtliga av släktets arter och förekommer som en av föräldrarna i mer än 800 första till femte generationshybrider.
Artepitetet kommer efter Prasong Sukhakul, en thailänds orkidéodlare och föreståndare för Bangkrabue Nursery i Bangkok som var den som sände två plantor av arten till en plantskola nära Soligen i västra Tyskland i en sändning //[[Paph. callosum|58cb8f5a-cf0a-4e8f-b8f2-2e3865819dba]]// 1964.

!Utseende
Bladrosetten bildas av tre till sex blad som blir upptill 13 cm långa och tre till fem cm breda. Bladen hos den här arten har blågröna markeringar på en ljusgrön eller till och med silvergrön bakgrund. Blomstängeln kan komma när som helst under året och blir 25 till 30 cm lång. Den ensamma, upptill 15 cm stora blomman, har en grön bakgrundsfärg tätt täckta med hundratals purpurbruna prickar på petalerna. De breda, platta petalerna har också vitt hår längs hela kanten. Läppen är mahognyfärgad mot öppningen som övergår i ljust grönt mot botten. Den dorsala petalen är krämvit med markerade nerver i grönt. //Aureum// och //alba// former förekommer också men är ovanliga.
Blommorna är långlivade, de håller vanligen två eller tre månader.

!Skötsel
Det är en enkel planta att odla och att få att blomma, ofta två gånger om året. Den är tolerant för en hel del förhållanden men verkar trivas med hög luftfuktighet och ofta men svag näringsdos. Håll den jämnt fuktig och låt den bara torka upp lätt mellan vattningarna så inte rötterna blir helt torra. Den vill ha en högre vattningsfrekvens under tillväxtperioden vår och sommar. I naturen är november till april de torraste månaderna, med december och januari mycket torra. Augusti och september är de våtaste månaderna på året. För att inducera blomning, minska vattningen på vintern.
Vattna med full gödning varannan vattning och skölj igenom komposten med rent vatten regelbundet så det inte bygger upp salter i komposten. Den tolererar mer gödning under sommarmånaderna än under vintern.
Ge den halvskugga, ju skuggigare desto intensivare blir bladverkets mönstring. Ett östfönster eller konstljus som ger 5000 till 10000 lux är ypperligt.
Den klarar utmärkt temperaturer från 15 till 25 grader.
Den föredrar att planteras om precis efter blomningen. Låt den torka upp lite mer än vanligt mellan vattningarna de första tre veckorna efter omplanteringen. Använd en medelgrov barkkompost uppblandad med leca som är öppen och genomsläpplig, de klarar inte av när komposten blir för nedbruten. Det är därför viktigt att plantera om med som mest ett och ett halvt års mellanrum, gärna en gång om året.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum sukhakulii// f. //aureum// Van Delden (1999)

!Rekommenderad läsning
[[Orchid Web|http://www.orchidweb.com/orchidofweek.aspx?id=385]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphsukhakulii.htm]]
[[Slipper Orchids|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/sukhakulii/index.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_sukhakulii]]
[[Antec Laboratory & Ladyslipper Farm page|http://www.ladyslipper.com/0127-04.htm]]
[[Orchid Societies of Victora Inc|http://www.oscov.asn.au/articles3/paphsuk.htm]]












































































!Allmänt och utbredning
Detta asiatiska släkte utgörs av <$view field="count"/> arter, men endast tre återfinns i odling. Dessa terrestriska orkidéer härstammar från östra Asien, Taiwan och omkringliggande öar. Namnet //Bletilla// betyder "liten Bletia" och pekar på blommornas likheter med de hos släktet //[[Bletia|2c95efa7-ffca-47dd-b601-0f69f84f1ca6]]// som dock endast växer i Centralamerika.
Den första //Bletilla// arten som beskrevs var //[[Ble. striata|a14ea0a5-900f-4cf3-a13a-ea63aded0f17]]//. Den hittades i Japan och beskrevs 1784 av Thunberg i Flora Japonica under namnet //Limodorum striatum//. Reichenbach förde in arten i bletillasläktet år 1878 i Botanische Zeitung. Bletillasläktet hade 1853 införts av samme Reichenbach utifrån ett exemplar av //Bletilla gebina//. //Ble. gebina// och //[[Ble. striata|a14ea0a5-900f-4cf3-a13a-ea63aded0f17]]// har senare av taxonomer konstaterats vara samma art.

!Utseende
Bladen är långsmala, veckade längs bladets hela längd, med en distinkt lökliknande pseudobulb vid basen av stammen. De nya skott kommer sent på våren, och under sommaren blommar de olika arterna under juni, juli och augusti. De fåtaliga, uppseendeväckande, cattleyaliknande blommorna är kortstjälkade och kommer på en upprätt blomstängel.

!Skötsel
Släktet odlas enkelt i kruka, och i södra Sverige även utomhus. Utomhus kan de planteras i vanlig grov blomjord med lite tillsats av kompost och lövjord. Rhizomet placeras drygt fyra cm djupt på en plats som är skyddad och solig. Var noga med att skydda plantorna under vintern med löv eller tallbarr. Skyddet hjälper mot kyla och ser till att eventuella värmetoppar på våren inte får plantorna att vakna för tidigt. I kruka odlas de bäst i en blandning av lerjord, grov sand och finfördelad bark eller lövförna, alternativt i en mix av grov bark, lövförna, mossa och perlite. Ett väldränerande material i botten av krukan är ett krav, de vill inte stå blöt. De får heller inte torka ut helt. Om plantan odlas i kruka placeras den med fördel utomhus under sommarmånaderna. När temperaturen sjunker på hösten, minskas vattningen. Vilan påbörjas då plantan tappar sina blad. Under vilan ska krukodlade plantor förvaras kallt i fuktig atmosfär. Komposten behöver bara vara något fuktig. Om temperaturen är för hög tvingas plantan skjuta nya skott för tidigt, vilket resulterar i en svag planta.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Arethuseae
''Undertribus'': Bletinae

''Typart''
//Ble. gebina// Rchb.f. (1853) synonym till //[[Ble. striata|a14ea0a5-900f-4cf3-a13a-ea63aded0f17]]// Rchb.f. (1878)

''Uttal''
bleh-TIL-uh

''Synonymer''
__Heterotypic Synonyms:__
//Jimensia// Raf.
//Polytoma// Loureiro (1868)

!Rekommenderad läsning
[[OrkidePrat|http://www.neovita.com/orkideer/no.cgi?artikel=grund&grupp=bletilla&avdelning=latinsktNamn&huvudavdelning=rad]]
[[Wikipedia|http://en.wikipedia.org/wiki/Bletilla]]






!Allmänt och utbredning
Detta mykoheterotrofa släkte med <$view field="count"/> arter från Indonesien, Filippinerna, New Guinea, Australien, ögrupperna Salomonöarna, Mikronesien och Fiji är vittspridda över en stor yta men de enskilda arterna är oftast endemiska för ett väldigt litet område. Arterna hos //Pseudovanilla// växer normalt på humusrika marker i fuktiga, täta, tropiska skogar, ibland nära bäckar eller vattenfall. Eftersom de är intimt förknippade med nedbrytande svampar påträffas de ofta i störda områden med mycket död ved.
Härledning av namnet kommer från det grekiska ''pseudes'' som betyder "falsk" och ''vanilla'', med hänvisning till likheten hos dessa plantors vana att liksom det närbesläktade //[[Vanilla|ab8b1737-9317-40c6-bdae-c80f268057c9]]// bilda lianer. Detta släkte erbjuder en intressant inblick i de biologiska processerna i pedomorfi och neoteni, vilket innebär att unga organismer är långsamma att utveckla vuxna egenskaper eller att egenskaper från ungdommen lever kvar hos även hos vuxna individer. Alla orkidéer börjar livet som groddar utan klorofyll och utveckla bara det gröna pigmentet som unga vuxna. Hos //Pseudovanilla// kan dock lianerna vara mer än 2 m långa innan de mognar och blir gröna.

!Utseende
De växer terrestriskt men bildar grenade, klättrande stammar med tillbakabildade, trekantiga fjälliknande blad och en tjock, ibland klubbliknande, rot vid varje nod. Stammen är rund i genomskärning och orange eller gul när den som ung nästan helt saknar klorofyll men de utvecklar klorofyll när de blir äldre och övergår i grönt. Särskilt vid basen av blommande skott de kan också förstoras och bildades nästan bladliknande grenverk. Unga plantor är stark mykoheterotrofa, äldre plantor med mera klorofyll klarar sig bättre men inte helt utan näringen från svamparna. I änden av stammen kommer en blomställning med upptill 150 blommor som vardera bara är öppna en dag. Blommorna är gröna eller gula med en mönstrad läpp med åsar och vårtor i klara gula, vita eller orange färger. Framre delen av läppen är rundad med en vågig kant. Sepalerna är köttiga med den dorsala sepalens kanter något inrullade. Petalerna är vanligen liknande sepalerna i storlek, form och färg. Frökapseln är avlångt rundad med otaliga frön, en till två mm stora. Fröna har en vinge som en ring runt fröet, med en djup inskärning på ena sidan vilket ger den ett utseende som ett näckrosblad.

!Skötsel
Eftersom de är mykoheterotrofer är de mycket svåra att få att överleva i odling.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanillineae ''Undertribus'': N/A

----
''Typart''
//[[Pva. foliata|7abb4b32-77a6-4f9f-8df7-1da1a492c251]]// Garay (1986)

----
''Uttal''
su-do-vah-NIL-ah

----
''Synonymer''
N/A

!Rekommenderad läsning
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:166571]] 2015-12-30
[[Memim|http://memim.com/pseudovanilla.html]] 2015-12-30













































































!Allmänt och utbredning
Det finns <$view field="count"/> arter epifyter, eller mer sällan litofyter, spridda från Mexiko till norra Argentina. De växer framför allt högre upp i de svala, fuktiga molnskogarna på Andernas bergssidor, på mellan 1800 till 2400 meters höjd över havet.
Släktet har fått sitt namn efter den colombianske botanisten José Manuel Restrepo Veléz, guvernör i delstaten Antioquia, som var den förste att studera geografi och naturhistoria hos Colombias bergkedja Anderna och upptäckte //[[Rstp. elegans|d339a2fc-0154-46e2-9a94-5e4e63886fdf]]// i Venezuela runt 1846.
De är nära besläktade med //[[Pleurothallis|02e46936-5b4b-4260-a200-382fd33bb905]]//, men har oftast mer utstuderat uppseendeväckande blommor. Tyvärr är vissa restrepior nästan omöjliga att artbestämma. Nu gör det inte så mycket, de är underbara som de är och det finns en del arter som är mycket särpräglade och lätta att bestämma. Släktet är indelat i tre undersläkten
<$reveal type="nomatch" state="$:/temp/state-a3a2cec3-61a6-4caa-a365-396d3bb1cf97" text="show">
<$button set="$:/temp/state-a3a2cec3-61a6-4caa-a365-396d3bb1cf97" setTo="show">visa mer info om undersläktena</$button></$reveal>
<$reveal type="match" state="$:/temp/state-a3a2cec3-61a6-4caa-a365-396d3bb1cf97" text="show">

;Ecmeles @@font-weight:normal;som kännetecknas av en särskilda strukturen på foderbladen@@
:[[Rstp. aberrans|44a76d67-e424-4447-9410-8a353ee991ba]]
;Pachymeles @@font-weight:normal;med sin enda art med köttiga blad@@
:[[Rstp. chocoensis|be75b78b-2830-4c60-9e52-cd85c389aed2]]
;Restrepia @@font-weight:normal;som i sin tur indelas i två grupper beroende på längden på bladskaftet@@
:- Pleurothallopsis med korta skaft och blommorna dolda av bladet
:- Restrepia med långa skaft och blommorna väl synliga.

<$button set="$:/temp/state-a3a2cec3-61a6-4caa-a365-396d3bb1cf97" setTo="hide">dölj</$button>

</$reveal>

!Utseende
Det finns en mängd arter som är väldigt variabla och dessutom liknar varandra, för att komplicera saken ännu mer.
//[[Rstp. elegans|d339a2fc-0154-46e2-9a94-5e4e63886fdf]]// tillhör ett stort komplex med arter av typen elegans-guttulata, dessa är nästan alltid prickiga på synesepalen. Arter ur ett annat komplex med exempelvis antennifera-trichoglossa har randiga.
De är små tuvbildande epifyter, och mer undantagsvis litofyter, som saknar pseudobulber. Det upprätta, tjockt läderartade bladet är ovalt till elliptiskt. Luftrötterna ser ut som fina hårstrån.
Arterna inom släktet producerar häpnadsväckande blommor, som kommer ensamma på en blomstängel från basen av bladets rygg. Sepaler och petaler bär antennliknande utskott som är typiska för släktet. Den dorsala sepalen är upprätt och slutar i ett något tjockare klubbliknande utskott. De laterala sepalerna är sammanväxta och kan vara synnerligen färggrann i vitt, gult, rosa, lila, orange eller olika nyanser brunt med kontrasterande fläckar eller ränder i rödlila. De långa laterala petalerna slutar i en tjock, klubbformad spets. Petalerna är transparanta och har tre tydliga nerver och har vid basen ett par trådlika utskott. Den långa läppen är oval och bredast mot spetsen. Under rätt förhållanden kan de blomma hela året.

!Skötsel
På det stora hela kan de odlas som de flesta pleurothalliderna och växer bra i små krukor med hög luftfuktighet och en skuggad placering. I odling verkar de kunna klara ljusare, torrare och varmare förhållanden än många pleurothallider. De kan mångfaldigas genom små keikis som bildas från basen av färdigväxta blad, eller genom att blad som skurits långs mittnerven placeras i fuktig vitmossa.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Rstp. antennifera|eb4ecc96-82ff-4490-9a92-6c27f906b0c9]]// H.B.Kunth (1816)

''Uttal''
reh-STREP-ee-ah

''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Restrepia]]
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/index.php?option=com_content&view=article&id=151:restrepia5&catid=39&Itemid=58]]
[[Orchids.it|http://www.orchids.it/2009/03/19/restrepia-non-basta-la-parola/]] italienska
[[Icones Pleurothallidinarum XIII|http://damianus.bmd.br/Livros/Livros%20ICONES%20PLEUROTHALLIDINARUM/icones13.pdf]] nyckel till släktet, 50Mb pdf
[[natures47friend|http://natures47friend.hubpages.com/hub/Orchids-from-cloud-forests-Restrepia]]






































































!Allmänt och utbredning
De växer som mattbildare på mossbeväxta stenblock och klippor i skuggiga dalar i Kina, runt 3000 meter över havet. De är kallväxande terrestriska eller litofytiska småväxta orkidér.

!Utseende
Arten får koniska, mörkt gröna pseudobulber som nertill kan vara översållade med mörklila prickar. De bär ett enda, lansettlikt blad.
Blomman kommer under senvintern eller våren på en upprätt, ungefär sju cm lång blomstängel innan bladet kommer fram. Blommorna är gula med rödbruna fläckar på läppen.

!Skötsel
På sommaren placeras växterna i ett inte allt för varmt läge med god ventilation, hög luftfuktighet och halvskugga. Skuggningen är viktig, då bladen är ömtåliga och lätt bränns. Utomhus kan de tolerera full sol, men en skuggig plats är att föredra.
Temperaturen bör, om möjligt, inte överstiga 25 grader. //Pln. forrestii// gynnas av en lång, kall vila och bör förvaras kallt fram till mars om möjligt.
Denna art är dock en av de arter som tenderar att blomma tidigt, och om de nya skotten börjar tillväxa måste knölarna eventuellt planteras tidigare. Även om kyla kan senarelägga blomningen, är det inte nödvändigt att den förhindras helt. Bulberna kan börja blomma i mörkret och kylan i ett kylskåp!

!Synonymer
__Heterotypic Synonyms:__
//Pleione alba// H.Li & G.H.Feng (1984)
//Pleione forrestii// var. //alba// P.J.Cribb (1999)
//Pleione forrestii// f. //alba// Torelli & Riccab. (2000)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleioneforestii.htm]]





















































































































































































































































































































!Allmänt och utbredning
Den är ganska vanlig, utbredd och variabel inom sitt habitat genom Andernas bergsskogar från Venezuela till Ecuador. Där växer den mellan 1600 och 3000 meter över havsnivån.
Namnet kommer från latinets ''moscosus'' som betyder "mossig" och kommer av den håriga blomstängeln.

!Utseende
Det är en liten epifytisk eller terrestrisk orkidé som bildar en underjordisk stam från vilken de långsmala långa bladen kommer. Ett fåtal blommor slår ut successivt under hösten på en upptill en och en halv dm lång blomstängel som är täckt med korta hår. Bara en blomma i taget är öppna, och var och en av hålls högt över bladen. De svagt gula blommorna blir ungefär två cm stora med en läpp som kan stängas på en sekund. Den öppnas sedan igen efter upptill en halvtimme, när pollineringen väl är genomförd.

!Skötsel
De kommer från fuktiga molnskogar i höga bergsområden och bör därför odlas fuktiga utan direkt sol. De trivs bäst kallt till intermediärt med hög luftfuktighet.

!Synonymer
__Homotypic Synonyms:__
//Masdevallia muscosa// Rchb.f. (1875)
__Heterotypic Synonyms:__
//Masdevallia xipheres// Rchb.f. (1876)
//Scaphosepalum xipheres// Schlechter (1920)
//Porroglossum xipheres// Garay (1967)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/porromuscosum.htm]]
[[Orchids of the Plurothallid Alliance|http://www.pleurothallids.com/porroglossum_muscosum.htm]]
[[Orchid Species Photographs|http://www.orchidphotos.org/images/orchids/speciesV2/Porroglossum/porroglossummuscosum1_394.html]] bild




!Allmänt och utbredning
Känd från endast fem lokaler är den endemisk för Nya Guinea där den växer i ljusa, öppna marker skuggade av höga gräs eller rhododendronbuskar på gräsklädda leriga jordar över kalkstensklippor mellan 1700 och 1800 meters höjd. Den växer genom höglandsområdet på centrala Nya Guinea från området nära Paniai sjöarna i provinsen Papua på västra Nya Guinea österut mot provinsen Southern Highlands. 
Arten är uppkallad efter [[Wilhelminha som var drottning i Nederländerna|https://sv.m.wikipedia.org/wiki/Vilhelmina_av_Nederländerna]] i början av 1900-talet. Taxonomiskt tillhör den undersläkte Polyantha sektionen Mastigopetalum.

!Utseende
Den bildar en rosett med helgröna, långsmala blad. Under december och januari kommer en blomstängel med två eller tre blommor. Blommorna liknar de hos //[[Paph. praestan|cc687592-a01b-4cfc-9327-1d07b2fba922]]// men är mindre, köttigare och petalerna är inte lika vridna.

!Skötsel
I dess naturliga utbredningsområde ger sommarens ofta förekommande regn mycket fukt men våren är den blötaste perioden. Vintern den torraste med bara sporadiska lätta regn men med frekvent dimma som håller luftfuktigheten hög.
Den bör ges medel eller mycket ljus utan direkt sol och svala eller intermediära temperaturer. Odla i en väldränerad mix med medelgrov kompost och perlite eller sphagnum, gärna med en tillsats kalk. Vattna regelbundet var fjärde till var femte dag. För att inducera blomningen, håll temperaturen låg och minska vattningen under sommaren. Om plantan delas behöver varje delning rejält med rötter annars kommer den inte tillväxa eller ta mycket lång tid på sig innan den kommer igång igen.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum praestans// subsp. //wilhelminae// M.W.Wood (1977)
//Paphiopedilum glanduliferum// var. //wilhelminae// P.J.Cribb (1986)
//Paphiopedilum praestans// var. //wilhelminae// Braem (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphwilhelminae.htm]] 2015-09-11
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_wilhelminae]] 2015-09-11





















































































!Allmänt och utbredning
Det är en svalväxande miniatyrart från de subtropiska, lövfällande skogarna längs vattendrag i centrala Kina, östra och västra Himalaya, provinsen Assam i Indien, Bangladesh, Nepal, Bhutan, Sikkim, ögruppen Andamanerna, Myanamar, Thailand, Laos och Vietnam mellan 300 och 1500 meters höjd.
Blomställningens kompakta utseende och klara färger gör att man misstänker att arten är fågelpollinerad.
Kromosomantalet är 2n=38. 
Artnamnet //ampullacea// [am-pyoo-LAH-see-ah] kommer från latinets ''ampullaceus / a / um'' och betyder "flaskformad".

!Utseende
Det är en miniatyrart som sällan blir större än 15 cm stor. Arten saknar pseudobulber utan har ett monopodialt växtsätt med tjocka, köttiga rötter och tio cm långa blad med en tydlig köl längs mittnerven. Bladen kommer alternerande i två rader längs stammen. Om plantan växer för ljust bildar bladen lila prickar, med mängden prickar proportionell mot mängden ljus. Från bladbasen kommer en upptill 20 cm lång blomstängel som bär en kompakt blomställning med ibland så många som 20 stycken, runt två cm stora blommor. Det finnas två varianter, en med rosa blommor och en med orangeröda. Den huvudsakliga blomningsperioden är april och maj, men blommorna kan komma när som helst från senvintern till midsommar. För att blomma kräver plantan rikligt med ljus.

!Skötsel
Den behöver mycket ljus, 25000 till 35000 lux, med skydd bara för den starkaste middagssolen, tillsammans med hög luftfuktighet och god luftcirkulation. Under tillväxtperioden behöver den svag gödning en gång i veckan och mycket vatten med vattning gärna varannan dag, minst en gång om dagen om den odlas monterad. Vintertid klarar den en temperatur runt tio grader och en lätt uttorkning mellan vattningarna. Ge den ungefär en månad på våren med bara dagliga morgonduschar.
Den kan med fördel monteras eller planteras i hängande korgar klädda med sphagnum eller trädormbunke och en väldränerad, grov barkkompost med sphagnum. Rötterna är känsliga för en kompakt, nedbruten kompost så plantera om regelbundet, gärna varje år.
I sitt naturliga habitat utsätts plantan för en månadsmedelnederbörd från 8 mm i januari till mars och upp till 299 mm i juni. Dagsmedeltemperatur i januari kan gå upp till 30 grader med en nattemperatur ner till 13. Den högsta uppmätta dagtemperaturen under året kan i maj gå upp ända till 36 grader och under natten gå ner till 23 grader.

!Synonymer
__Homotypic Synonyms:__
//Aerides ampullacea// Roxb. (1832)
//Saccolabium ampullaceum// Lindl. (1838)
//Oeceoclades ampullacea//Voigt (1845)
//Gastrochilus ampullaceus// Kuntze (1891)
//Ascocentrum ampullaceum// Schlechter (1913)
__Heterotypic Synonyms:__
//Ascocentrum ampullaceum// var. //aurantiacum// Pradhan (1979)

!Rekommenderad läsning
[[Species Specific|http://www.species-specific.com/orchid/vanda-ampullacea-syn-ascocentrum-ampullaceum/]]
[[Internet Orchid Species Photo Encyclopedia |http://www.orchidspecies.com/ascocentrumampullaceum.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Ascocentrum_ampullaceum]]






































!Allmänt och utbredning
//Paph. haynaldianum// är en art endemisk för öarna Negros och Luzon i Filippinerna där den växer terrestriskt, litofytiskt och mer sällan epifytiskt på kalkstensklippor från havsnivå upp till 1400 meters höjd.
Den är uppkallad efter den polske ärkebiskop av Kalocsa, Lajos Haynald. Taxonomiskt tillhör den undersläktet Polyantha sektionen Polyantha. Kromosomtalet är 2n=26.

!Utseende
Det är en stor art med sex till sju stycken 30 cm långa och runt fem cm breda, matt mörkgröna blad. Under våren kommer en halvmeterlång blomstängel som bär en till sju stycken 15 cm breda blommor som öppnas successivt. Petalerna är gröna med rödbruna prickar och rosa mot spetsarna. Den dorsala sepalen är vit mot spetsen och ljusgrön mot basen med mörkt rosa prickar och längsgående ränder.

!Skötsel
I naturen är dess utbredningsområde konstant fuktigt med hög luftfuktighet. Våren har lätta regn och sommaren har kraftiga regn med temperaturer som når över 30 grader, december till mars är de torraste och svalaste månaderna med temperaturer ner till nollan.
De bör få en placering med ljus skugga till starkt ljus, 20000 till 32000 lux, och intermediära temperaturer. Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattningen under våren för att inducera blomningen. 
Odla i en väldränerad mix av medelgrov barkkompost och perlit, plantan föredrar ett öppet medium. Vid omplantering och delning lämna minst tre skott för konstant blomning.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium haynaldianum// Rchb.f. (1874)
//Cordula haynaldiana// Rolfe (1912)
__Heterotypic Synonyms:__
//Paphiopedilum haynaldianum// f. //album// Asher (2000)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphiopehaynaldianum.htm]] 2015-05-17
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_haynaldianum]] 2015-05-17
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/polyantha/haynaldianum/index.html]] 2015-05-17
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-haynaldianum.html]] 2015-05-17



























































''Etymology:'' 
After Ambrose Natbaniel Henry (born 1936) for his pioneering contributions to the flora and vegetation of the Agastyamalai hills of India.



































!Allmänt och utbredning
Det är en miniatyrart endemisk för en enda dal i molnskogarna på de östra sluttningarna av Cordillerna i centrala Colombia mellan 1600 och 1700 meter över havet.
Namnet kommer från det latinska ''cupreus'' som betyder "kopparfärgad" efter färgen på synsepalen.

!Utseende
Den saknar pseudobulber utan bladen kommer från en underjordisk stam. Bladstänglarna är vid basen omslutna av sex eller sju tunna, papperslika täckblad. Bladstängeln bär ett ensamt, avlångt ovalt blad som ofta är purpurfärgat på undersidan. Plantan blir uppemot 15 cm stor med sex cm stora, hjärtformade blad. Under vår och höst kommer en ensam, upptill sex cm lång, smal blomstängel från bladfästet på ovansidan av bladet. Blomman blir endast två cm stor och har en lång, smal dorsal sepal. Läppen hos blommorna är ofta markant inåtböjd mot spetsen och har en djupa kopparfärg som ser nästan metallisk ut.


!Skötsel
Odla den svalt och ljust utan direkt solsken. Vattna ofta och håll den ständigt fuktig men något torrare än andra restrepior. Odla den i fin barkkompost och perlite eller i ren sphagnum.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/restcuprea.htm]]
[[Orchids in Bloom|http://orchidsinbloom-ron.blogspot.se/2010/10/restrepia-cuprea.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_cuprea]]

































!Allmänt och utbredning
//Bulb. falcatum// [bulb-oh-FILL-um fal-KAY-tum] återfinns epifytiskt eller mer sällan litofytiskt i låglandsskogar från de tropiska delarna av från havsnivå upptill 1800 meters höjd.
<$reveal type="nomatch" state="$:/temp/state-aa214828-9591-411d-8b12-b8eba4627cca" text="show">
<$button set="$:/temp/state-aa214828-9591-411d-8b12-b8eba4627cca" setTo="show">visa mer info</$button></$reveal>
<$reveal type="match" state="$:/temp/state-aa214828-9591-411d-8b12-b8eba4627cca" text="show">
''Republiken Sierra Leone'' (Musaia, Messima, Fanima, Mano-Bonjema, Pendembu, Mafore, Mabira forest, Gengelu), ''Republiken Ghana'' (Jasikan, Effiduasi), ''Republiken Togo'', ''Republiken Elfenbenskusten'', ''Republiken Guinea'' (Nzèrèkorè, Lola), ''Republiken Liberia'' (Kitoma, Gran Bassa), ''Förbundsrepubliken Nigeria'' (Agbadi, Sapaba forest, Akure forest, Usonigbe forest, Okomu forest, Ondo), ''Republiken Benin'', ''Republiken Kamerun'' (Mt. Cameroon, Bakingili, Limbé, Bataki), ''Centralafrikanska republiken'', ''Republiken Gabon'' (Estuaire, Ngounié, Ogooué-Ivindo), ''Demokratiska republiken Kongo'', ''Republiken Uganda'' (Bunyoro, Budongo forest, Siba)

<$button set="$:/temp/state-aa214828-9591-411d-8b12-b8eba4627cca" setTo="hide">dölj</$button>
</$reveal>
Den tillhör sektionen Megaclinium inom //[[Bulbophyllum|e98d2bd9-4878-4182-acc8-d67b9b46cc1f]]//.
Förutom varianten //Bulb. falcatum// var. //falcatum// finns två varianter till av arten, //Bulb. falcatum// var. //bufo// Govaerts (1996) och //Bulb. falcatum// var. //velutinum// J.J.Verm. (1992) som har mindre utbredningsområden, kortare blomställning, mindre blommor och små skillnader i utseende.
Artnamnet kommer från latinets ''falx'' för "skära" och ''falcatus,-a,-um'' betyder helt enkelt "formad som en skära".

!Utseende
Den får fem cm stora, koniska pseudobulber två stycken tio cm långa, elliptiska blad i toppen. Under vintern eller våren kommer från basen av bulben en två dm lång blomstängel vars övre halva är uppsvälld och tillplattad som en ärtskida med färger i grönt eller mörkt rött. Längs vardera sida av blomställningen kommer en rad med tio till 15 stycken, en cm stora blommor, med bara några få samtidigt utslagna. Blommorna är gula eller vita med purpurröda prickar och små, nästan trådlika petaler. Sepalerna är mörkröda och den dorsala sepalen är störst och mest framträdande med sina drygt nio mm och gul förtjockning mot spetsen.

!Skötsel
Odla den varmt, skuggigt och fuktigt under sommaren, låt inte komposten torka ut. Vintertid kan vattningen reduceras och komposten få torka upp mellan vattningarna. Ge god luftcirkulation för att minska risken för mögel och röta.
Den odlas med fördel i kruka med en mix av sphagnum och fin barkkompost eller monterad om luftfuktigheten kan hållas tillräckligt hög.

!Synonymer
__Homotypic Synonyms:__
//Megaclinium falcatum// Lindl. (1826)
//Phyllorkis falcata// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbophylumfalcatum.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Bulbophyllum_falcatum]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Bulbophyllum_falcatum]]
[[The beauty of Orchids & Flower|http://www.orchids-flowers.com/orchids/bulbophyllum-falcatum-lindl-rchb-f-1861/]]
















































































































































































!Allmänt och utbredning
Arten växer som en terrestrisk, lövfällande orkidé bland skuggande korta gräs i Vietnam och Kina. Den växer, förutom i provinsen Yunnan, även i Sichuan, Guangxi och Guizhou. //Ble. ochracea// växer naturligt på mycket soliga grässlätter vid skogskanten och på 800 till 1500 meter över havet.
1913 beskrevs //Ble. ochracea// av Schlechter utifrån material insamlat av den franske missionären Maire i Long-Ki, Yunnan.

!Utseende
Under våren kommer två till fyra långa, smala, längsveckade blad från den underjordiska pseudobulben. Dessa blad blir ungefär tre dm långa och två cm breda. Hela plantan blir upptill 50 cm hög. I maj till juni kommer en upptill halvmeter hög blomstängel från mitten av bladen. Stängeln kan ha tre till åtta stycken ljust gula, små cattleyaliknande blommor. Det är fram till idag den enda gulblommande //[[Bletilla|a2c934da-6382-40cc-b383-5db1e51f5b3b]]// som beskrivits. Dock är blomman inte helt gul, snarare delvis ockrafärgad. Läppen är vitfärgad med många gula och röda markeringar. Blommorna är tre och en halv cm i diameter. Blommorna öppnar sig en eller två åt gången upp mot toppen. I full sol blir plantan kortare och blommorna får en mörkt röd baksida.

!Skötsel
Det är en långsamt växande art som klarar från minus 20 grader till plus 30. //Ble. ochracea// växer bäst i full sol längst i norr, till halvskugga i söder. Vid odling i kruka, sätt pseudobulberna sju till tio cm under ytan i en svagt sur, väldränerad kompost med mycket organiskt material. Håll komposten jämnt fuktig, arten tycker inte om att torka ut. Göd med en svag näringslösning varje vecka. Vid plantering utomhus behöver de täckas med ett tjockt lager halm under vintern för att förhindra att bulberna skjuter skott för tidigt, eftersom de späda skotten är känsliga för frost och den starka vårsolen. De klarar både sura och basiska jordar så länge de får ett lager halvt nedbruten kompost runt de känsliga bulberna. Dela plantan efter fyra eller fem år för att gynna blomningen. Vid krukodling behöver de en period med kyla och torka. Det bästa är att ha kvar dem krukan under vintern och plantera om på våren. Om man plockar ur dem och förvarar dem barrotade riskerar man att torka ut de tunna rhizomen.

!Synonymer
__Homotypic Synonyms:__
//Jimensia ochracea// Garay & R.E.Schult. (1958)

!Rekommenderad läsning
[[the Orchid Mall|http://drriley.mypcr.com/bletilla/]]
[[OrkidePrat|http://www.neovita.com/orkideer/no.cgi?artikel=ochracea&grupp=bletilla&avdelning=latinsktNamn&huvudavdelning=rad]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/blettilaochracea.htm]]
[[Asian flora|http://www.asianflora.com/Orchidaceae/Bletilla-ochracea.htm]] (mkt snygg bild)
[[Prem??s Orchid Galley|http://www.premdesign.com/orchidpics/bletilla_ochracea.jpg]] (snygg bild)





!Allmänt och utbredning
Det finns <$view field="count"/> arter av släktet //Vanilla// i samtliga av de tropiska och subtropiska områdena av jorden.
Typarten döptes av Linné till //Epidendrum vanilla// (1753), men döptes senare om till //[[Vl. mexicana|8493ae7d-914b-4c05-84b5-97f2dc0e7bfb]]// av Miller (1786). Plantorna karaktäriseras, liksom lianer, av att de har ett monopodialt klättrande, klängande växtsätt. De kan bli uppemot 30 meter långa.

!Utseende
Plantorna karaktäriseras, liksom lianer, av att de har ett monopodialt klättrande, klängande växtsätt. De kan bli uppemot 30 meter långa. Bladen är alternerande utspridda längs stammen. Dessa blad kan vara köttiga, reducerade eller saknas helt.
De korta blomstjälkar kommer från samma nod som bladet och eventuella luftrötter, och kan bära en eller flera blommor. Blommorna är kortlivade men uppemot sex cm stora. Blommorna har liknade sepaler och petaler, med en läpp som är förenad vid basen och vidgas mot spetsen för att bilda en trumpet runt den långa smala kolumnen.
Frukten är en långsmal frökapsel som hos //[[Vl. planifolia|afd0a590-81b5-4eda-984f-825750a84bad]]// används för att framställa äkta vanilj. Andra arter som odlas kommersiellt är //[[Vl. pompona|1e2a60bc-231f-470c-8d88-f616cb170d96]]//, funnen i Västindien, och naturhybriden //Vl. tahitensis// funnen på Tahiti. Ingen annan art ger dock en lika smakrik eller doftande frökapsel som //[[Vl. planifolia|afd0a590-81b5-4eda-984f-825750a84bad]]//.

!Skötsel
Plantorna behöver en stadig lerkruka, med en kompost av lika delar osmunda, ormbunksfibrer och lövjord. Växten behöver också ett stöd att klänga på och mycket ljus för att blomma.
Många plantor ger blommor först när de blivit rejält stora. Håll plantan jämnt fuktig och ge näring ofta.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Triphoreae
''Undertribus'': Vanillinae

''Typart''
//[[Vl. mexicana|8493ae7d-914b-4c05-84b5-97f2dc0e7bfb]]// Miller (1786)

''Uttal''
van-IL-uh

''Synonymer''
__Heterotypic Synonyms:__
//Vanillophorum// Neck. (1790) opus utique oppr.
//Myrobroma// Salisbury (1807)
//Dictyophyllaria// Garay (1986)
//Miguelia// Aver. (2011)

!Rekommenderad läsning
[[Jardin Naturel|http://www.baobabs.com/Vanilla.htm]]





























































































































































!Allmänt och utbredning
Det är en liten epifyt som växer varmt i trädtopparna i fuktiga tropiska skogar från havsnivå till 1500 meters höjd i områdena från Mexiko till Panama, Kuba och Surinam.
Den säljs fortfarande ofta under sitt gamla, felaktiga, namn //Epidendrum boothii//.

!Utseende
Pseudobulberna är ljust gröna, spolformade, något tillplattade, ungefär fem cm långa och kommer med en till tre cm intervall på ett krypande rhizom. Bulberna bär ett eller två långsmala, skinande mörkgröna blad.
De blommar under våren med ett halvdussin blommor på en upprätt 15 cm lång blomstängel som kommer från toppen av de nyaste bulberna innan dessa har mognat helt. Blommorna är starkt doftande och blir drygt tre cm i diameter. Sepalerna och petalerna är vaxartade i grönvita till ljusgula med en vit läpp som gulnar mot basen.

!Skötsel
Trots dess krypande växtsätt trivs den bra i kruka. Den växer även bra monterad om den bara får tillräckligt med vatten och ljus, och en intermediär till varm omgivning. Arten verkar gynnas av en svalare vintervila efter att tillväxten avstannat. En minsta vintertemperatur runt tolv grader rekommenderas för bästa resultat. De kräver en väldränerad kompost.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria boothii// Lindley (1838)
//Epidendrum boothii// I.Williams (1939)
__Heterotypic Synonyms:__
//Dinema paleaceum// Lindley (1840)
//Epidendrum auritum// Lindley (1843)
//Epidendrum lindenianum// A.Richard & Galeotti (1845)
//Epidendrum paleaceum// Rchb.f. (1866)
//Nidema paleacea// Acuña (1939)
//Encyclia paleacea// A.Lemé (1955) no basionym ref.

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/nidemabooth.htm]]
[[Abundaflora|http://www.abundaflora.com/nid_boothii.htm]] (bild)
[[Orchid photographs by Gary Yong Gee|http://www.yonggee.name/Notes/nidema_boothii.htm]]



















!Allmänt och utbredning
Släktet, som förkortas Cam., innehåller för närvarande fem arter som brutits loss från //[[Eria|b5950489-409b-46a6-bc77-5bc12e5c2a4e]]//. De är vitt spridda i Indonesien, Laos, Malaysia, Nya Guinea, Thailand, Vietnam och så långt österut som till provinsen Hainan i södra Kina mellan 500 och 2200 meters höjd över havet.
Namnet är hopsatt av de latinska ''campanulate'', som betyder "klockformad", och ''orchis'', och syftar på blommornas utseende.

!Utseende
De är små eller medelstora epifyter med tjocka, avlånga pseudobulber som mer liknar en uppsvälld stamdel. De kan blir upptill 13 cm långa med ett till fyra blad i toppen. Varje bulb kan ger upptill tre blomställningar med en till ett fåtal stjärnformiga blommor.

!Skötsel
I sina naturliga habitat utsätts de för temperaturer mellan nära noll och upptill 30 grader men vanligare är mellan tolv till 25 grader med en genomsnittlig luftfuktighet runt 70%.
De trivs i ljus halvskugga utan direkt middagssol, ungefär 15000 till 23000 lux.
Under tillväxtperioden behöver de mycket vatten ofta, vattna varannan till var tredje dag. Under hösten minskas vattningen gradvis och hållas nästan helt torr under ett par månader. I naturen är vinternederbörd liten, men dagg och duggregn ger fukt under nästan hela den torra perioden.
De kan odlas monterade om de kan få en tillräckligt hög luftfuktighet, men under varma och soliga dagar kan de behöva vattnas flera gånger. Vanligare är att odla i grunda krukor eller korgar klädda med ett lager sphagnummossa som torkar upp snabbt, och en lucker, väldränerande kompost, gärna med mycket kokosfibrer eller liknande.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Podochileae
''Undertribus'': Eriinae

''Typart''
//[[Cam. globifera|188fdf7f-e22a-486b-9488-efc2321bc9d7]]// Brieger (1981)

''Uttal''

''Synonymer''
N/A

!Rekommenderad läsning
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=313452]]
[[Flora of China|http://flora.huh.harvard.edu/china/PDF/PDF25/Campanulorchis.pdf]]  25: 346. 2009
[[Wild Orchids of Sumatra|http://orchidofsumatra.blogspot.se/2011/11/200-4-campanulorchis.html]] nyckel till släktet




















!Allmänt och utbredning
Det är en liten art från Thailand, Myanmar/Burma,  Malaysias övärld, Borneo och omgivande öar där den växer terrestriskt i skrevor på kalkstensklippor och vid basen av mossiga träd mot norr eller nordöst där de är skyddade mot solen, nära havsnivån från 10 till 200 meters höjd.
Den har används omfattande i hybridisering och få komplexa, vita hybrider inom släktet saknar //Paph. niveum// som åtminstone en av föräldrarna och som vanligen bidrar med sin vita blomfärg.
Namnet kommer från latinets ''niveus'' som betyder just "snövit" efter den rent vita grundfärgen på blomman. Taxonomiskt tillhör den undersläkte Brachypetalum. Kromosomtalet är 2n=26.

!Utseende
Den bildar fyra eller fem långsmala blad, mönstrade i mörkgrönt och gråblått med en purpurprickig undersida, upptill 20 cm långa och två till fyra cm breda. Under vår och sommar kommer en upprätt, drygt två decimeter lång blomstängel som bär en ensam, åtta cm stor blomma. Blommorna är stora, runda, i rent vitt med små rödaktiga stänk och med en klargul staminoid. De håller vanligtvis sex veckor och kan ibland uppträda två gånger per år.

!Skötsel
I dess naturliga utbredningsområde faller mycket regn under hösten men vinter och vår är det mest dimma och dis som håller plantorna fuktiga.
Ge den en ljus placering utan direkt sol, 20000 till 32000 lux, och en intermediär eller varm växtplats. Under tillväxten behöver den hög luftfuktighet och mycket vatten regelbundet. Sänk temperaturen, inte under 16 grader nattetid, och minska vattningen i två månader under vintervilan.
Plantera i en väldränerad kompost med medelgrov bark, perlite, leca och tillsats av kalk. Vattna regelbundet var fjärde till var femte dag. Mycket ljus under vintervilan främjar blomningen.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium niveum// Rchb.f. (1869)
//Cordula Nivea// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium niveum// var. //album// auct. (1891)
//Cypripedium pereirae// Ridl. (1914)
//Paphiopedilum pereirae// P.Taylor (1976)
//Paphiopedilum niveum// f. //album// O.Gruss (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphniveum.htm]] 2015-05-29
[[OrchidKarma|http://orchidkarma.com/paphiopedilum-niveum/]] 2015-05-29
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/brachypetalum/niveum/index.html]] 2015-05-29
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_niveum]] 2015-05-29

























































































































































!Allmänt och utbredning
Arten är spridd och relativt vanlig i norra delen av tropiska Sydamerika från Costa Rica till Guyana och söderut ner till Ecuador mellan 1300 m och 1500 meters höjd.
Artepitet kommer antingen från latinets ''sica'' som betyder "kort svärd" eller "stilett", eller ''sicarius'' som betyder "lönnmördare" och som ska anspela på de dolkliknande stjälkar och blad som plantan har.

!Utseende
Bladstjälken är tillplattad med en köl eller veck längs mittnerven och vidgas där den övergår i en oval bladskiva. Den korta blomstängeln som kan bära ett fåtal blommor kommer på ovansidan av bladet där stjälken övergår i bladet. Den kan blomma när som helst under året med åtta mm långa blommor, randiga i purpur på gult.

!Skötsel
I naturen växer de epifytiskt under mycket fuktiga och skuggiga förhållanden men i odling klarar de sig bra i halvskugga, mellan 15000 till 25000 lux. Håll plantan fuktig och låt den bara torka upp lätt mellan vattningarna. Tre till fem vattningar i veckan är lagom.

!Synonymer
__Homotypic Synonyms:__
//Pleurothallis sicaria// Lindley (1841)
//Humboltia sicaria// Kuntze (1891)
__Heterotypic Synonyms:__
//Pleurothallis tripteris// Rchb.f. (1850)
//Pleurothallis trigonopoda// Klotzsch (1853)
//Pleurothallis alpina// Ames (1923)
//Acianthera alpina// Pridgeon & M.W.Chase (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lepsicaria.htm]]








































































































































!Allmänt och utbredning
Arten förekommer naturligt i träskmarker från Mexiko till delar av Sydamerika och karibiska övärlden. Växten har sin växtplats från havsnivå upp till 1500 meter över havet.
Det finns två kända variationer av denna art, //Vl. planifolia// var. //variegata// med gula oregelbundna band längs bladen, och den sällsynta //Vl. planifolia// var. //albo-marginata// med vita kanter och vita band längs bladen.
De som först lyckades få fram vaniljsmaken var ett folk från Totonocapan. Ska man tro deras egen myt om vaniljen, så kom den till av kärlek. Gudinnan Xanath hade nämligen förälskat sig i en vanlig, dödlig man. För att få vara nära honom här på jorden, ville hon förvandla sig till något vackert. Något som han kunde se varje dag; vaniljblomman.
Bladens form har gett upphov till namnet som kommer från latinets ''plani'' som betyder "platt", och ''folia'' som står för "blad".

!Utseende
//Vl. planifolia// växer i början terrest men klättrar i naturen upp i träden och blir helt epifytisk. Den släpper till slut all kontakt med marken. Vid varje nod på rankan kommer ett enda blad tillsammans med en rot som den använder för att klänga uppför värdträdet eller stödet. Varje ovalt blad blir ungefär 12 cm långt. Rankan själv kan bli 20 meter lång och två cm i diameter.
Den doftande sex cm stora blomman har gröna petaler och sepaler med en gul läpp och könspelare. Blommorna som produceras under våren är kortlivade, vanligen blommar de under bara en enda dag. Med så många som 20 blommor, en dag i taget var sin dag, kan plantan blomma ett par tre veckor. Men för att initiera blomningen behöver den en distinkt torrperiod under vintern under minst en månad.
Rankan måste växa två till tre år, och ha en ungefärlig längd av tre meter innan den blommar. Om växten toppas tvingas den att grenas, och eventuellt blomma tidigare. Växten måste handpollineras för att producera de välkända frökapslarna. Blomman är självfertil, men den kan inte självpollinera utan hjälp, och den enda insekt som kan pollinera växten finns i Mexiko där växten ursprungligen kommer ifrån. Över allt annars där den odlas måste den handpollineras. Det tillsammans med att varje blomma bara blommar en enda dag gör äkta vanilj till världen näst dyraste krydda, näst efter äkta saffran.

!Skötsel
//Vl. planifolia// behöver varma och fuktiga odlingsförhållanden med en dagstemperatur mellan 25 och 32 grader, och nattemperatur inte under 15 grader. Trots att växten kräver hög luftfuktighet, kan för mycket fuktighet leda till sjukdomar. Om bladen blir gula är det antagligen för att den stått för torrt och i för starkt solljus. Detta försvagar plantan som lättare råkar ut för rotröta och mögelattacker.
Växten kräver jämn fuktighet och normal gödning tio månader om året, med en torrperiod utan gödsling under vintern. Den vill ha en mycket ljus växtplats utan direkt solljus. Komposten till en //Vl. planifolia// bör vara luftig med en hög halt organiskt material, och en sandig struktur. En blandning av lika delar blomjord, vitmossa, Leca och sand brukar fungera bra. I och med den stora andelen mossa i jordblandningen så behövs inte vattning lika ofta, utan det räcker att duscha plantorna. I naturen föredrar den svagt sluttande marker med en väldränerad jord.
Plantan kan lätt förökas genom att delar av stammen klipps av. Stamdelen måste torka en eller två veckor innan den planteras, och den bör ha minst två blad och en extra nod. Försiktighet bör iakttas vid delningen eftersom saven kan ge irriterande utslag på huden. Vaniljplantan är en av de få orkidér som är bekräftat giftig. Det vill säga, ställ den på ett ställe där små barn och husdjur inte kommer åt att tugga på den.

!Synonymer
__Homotypic Synonyms:__
//Notylia planifolia// Conz. (1947)
__Heterotypic Synonyms:__
//Epidendrum rubrum// Lam. (1783)
//Vanilla aromatica// Willdenow (1805)
//Myrobroma fragrans// Salisbury (1807)
//Vanilla viridiflora// Blume (1825)
//Vanilla sativa// Schiede (1829)
//Vanilla sylvestris// Schiede (1829)
//Vanilla duckei// Huber (1909)
//Vanilla rubra// Urb. (1920)
//Vanilla fragrans// Ames (1924)
//Vanilla planifolia// var. //angusta// Costantin & Poiss (1924)
//Notylia sativa// Conz. (1947)
//Notylia sylvestris// Conz. (1947) nom. illeg.
//Vanilla bampsiana// Geerinck (1982)

!Rekommenderad läsning
[[She net|http://www.shenet.se/vaxter/vanilj.html]]
[[Sharons OrchidPage|http://www.sdahldtp.com/vanilla.htm]]
[[Shanks|http://shanks.yourinfo.com/subpage.wwi?pageid=5]]
[[Jardin Naturel|http://www.baobabs.com/Vanilla.htm]]
[[Australian Orchid Council Inc.|http://www.orchidsaustralia.com/vanilla.htm]]
[[Spices Board of India|http://www.indianspices.com/html/s1923pac.htm]]
[[OrchidCloset|http://orchidcloset.net/culture_files/cf_van_planifolia.html]]



























































































!Allmänt och utbredning
//Eriaxis// är ett terrestriskt, monotypiskt släkte med den enda kända arten //[[Eri. rigida|6cca8292-1e47-4438-b7c8-e79ae681b850]]//, endemisk för öppna, ultrabasiska gräsmarker på Nya Kaledonien mellan 150 och 700 meters höjd. Mer sällan kan den även förekomma över 1250 m.
Den är närmast släkt med //[[Clematepistephium|3c2e0b25-775d-44e0-8d1f-5e8a6c3ca666]]//, också ett monotypiskt släkte från Nya Kaledonien som växer som klättrande rankor i regnskogen. De båda släktenas två arter ansågs tidigare tillhöra det numera uteslutande sydamerikanska släktet //[[Epistephium|69fa6428-35f8-4da4-8d42-eca4f3a7eb10]]//.
Namnet kommer från grekiskas ''erion'', "ull", och från latinska ''axis'' för "axel". Det hänvisar till den täta behåringen av blomställning, fruktämnen och sepaler.

!Utseende
Den är olik alla andra arter inom underfamiljen //Vanilloideae//. Den upprätta, ibland grenade, stammen kan bli över en meter lång och är ihålig med långa, tjocka, spröda rötter. Bladen är styva, läderartade. I toppen av stammen kommer under våren en klase med många, tre till fem cm stora, kortlivade blommor som slår ut en eller två åt gången succesivt efter varandra. De tre sepalerna är vita med brunt mot toppen, alla i samma storlek och med en hårig undersida. Petalerna är vita eller ljusrosa, oval och hårlösa. Läppen är treflikig, vit och har en purpurfärgad kant. Längs läppen sträcker sig centralt en serie gulaktiga åsar och borst. Liksom sepalerna är frökapseln täckt av tjockt, tätt, vitt hår, möjligen som ett skydd mot solen.

!Skötsel
De växer i full sol på näringsfattiga marker och är i det närmaste omöjlig att få att tillväxa i odling utanför sitt naturliga utbredningsområde.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Eri. rigida|6cca8292-1e47-4438-b7c8-e79ae681b850]]// Rchb.f. (1876)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning

; Ken Cameron, 2011,
://Vanilla Orchids: Natural History and Cultivation//
:Timber Press, ISBN: 9780881929898

;William Louis Stern & Walter S. Judd, 2000
://Comparative anatomy and systematics of the orchid tribe Vanilleae excluding //Vanilla
:Botanical Journal of Linnean Society (2000), no. 134, p. 179-202, [[doi:10.1006/bojl.2000.0369|http://onlinelibrary.wiley.com/doi/10.1111/j.1095-8339.2000.tb02350.x/pdf]]






!Allmänt och utbredning
//Brassavola// är ett släkte med <$view field="count"/> medlemmar, nära besläktad med //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//. Arterna kommer från låglandområdena i Mexiko i norr till det tropiska Sydamerika i söder. De flesta arterna inom släktet är epifyter med några få litofyter.
De fick sitt namn 1813 av den skotske botanisten Robert Brown. Själva namnet kommer från den berömda italienska adelsmannen och botanikern Antonio Musa Brassavola från 1500-talets Venedig. 1698 var //[[B. nodosa|9fc874cc-15d2-4081-a5fd-bd03d8433dc0]]// den första tropiska orkidén som fördes från den karibiska ön Curaco till Holland och gav upphov till odlingen och fascinationen för denna art i synnerhet och orkidéer i allmänhet.

!Utseende
Ett ensamt, grågrönt suckulent och långsmalt pennliknande blad kommer från toppen av den utdragna pseudobulben. Plantan producerar en enda blomma eller en blomklase med ett fåtal vita eller grönaktiga blommor. De tre sepalerna och de två laterala petalerna är grönaktiga, långa och smala. Basen av den breda, ibland fransade, läppen omsluter helt eller delvis könspelaren. Könspelaren har ett par halvcirkelformade flikar på vardera sidan, och bär vanligen tolv, ibland åtta, polliner.
De flesta arterna är mycket väldoftande, och använder sin citrusdoft för att locka till sig pollinatörer. Men de doftar bara på natten, då de pollineras av nattfjärilar. Under morgontimmarna skingras doften. En speciell art, //[[B. flagellaris|8f8ae033-38b8-40c0-bf8a-54f77031f4ec]]//, med sin doft av varm choklad, producerar en av de mest angenäma och intensiva dofterna bland alla orkidéer.
De blommar vanligen under sommaren och hösten och beroende på art håller blommorna mellan fem och 30 dagar. De stora gracila blommorna är vita eller limegröna, med ett nästan spindelliknande utseende.

!Skötsel
Dessa orkidéer är ganska enkla att sköta och de är bara krävande när det gäller ljuset. De behöver en hel del starkt ljus. De kan odlas i växthus, på fönsterbrädan eller under lysrör så länge de får mellan 25000 och 40000 lux. //Brassavola// kan tolerera en luftfuktighet ner mot 40%. För den bästa blomningen bör luftfuktigheten höjas, med till exempel regelbundna duschar eller fat med grus eller lecakulor. Under tillväxten kräver de kopiösa mängder med vatten så länge vattnet dräneras bort fort igen. När det nya skottet utvecklats kan vattning och luftfuktigheten minskas, men låt inte bladen skrynkla ihop sig. De frodas i intermediära temperaturer, med en lägsta temperaturen från 13 till 16 grader, till varma temperaturer, med lägsta temperaturen runt 18 grader eller högre.
De kan planteras i vanlig orkidékompost i krukor eller hängande korgar. Göd vid varje vattning med svag gödning eller varannan vecka under tillväxten och en gång i månaden under viloperioden.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[B. cucullata|e8f5fe07-fa7f-474c-96bb-86280a038392]]// Robert Brown (1813)

''Uttal''
bra-sah-VOH-luh

''Synonymer''
__Heterotypic Synonyms:__
//Epidendrum// Linne (1753)
//Lysimnia// Raf. (1838)
//Tulexis// Raf. (1838)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Brassavola]]
[[EzineArticles|http://ezinearticles.com/?Favorite-Orchids---Brassavola&id=3362031]]
[[Die Landesmuseen|http://www.landesmuseum.at/pdf_frei_remote/ANNA_79_0009-0022.pdf]]




































































!Allmänt och utbredning
//Phrag. hartwegii// [frag-muh-PEE-dee-um hart-WEG-ee-eye] växer terrestriskt på branta, ofta steniga sluttningar och på öppena stränder längs rinnande vattendrag i varma, otillgängliga, sumpiga låglandsskogar i Costa Rica, Panama, Colombia och Ecuador, möjligen också i Peru, mellan 50 och 1300 meters höjd över havet. Den har blad som liknar de hos //[[Phrag. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]// men med en staminoid utan hår.
Denna art namngavs efter Karl Theodor Hartweg (1812-1871) som var växtinsamlare för Royal Horticultural Society och senare överträdgårdsmästare i Karlsruhe, Tyskland. Runt år 1842 upptäckte han //Phrag. hartwegii// på östsluttningarna av Anderna nära Nanegal i Ecuador, på en höjd av cirka 1300 m.
Dodson konstaterade 1966 att arten pollineras av flugsläktet //Sylphus// och små bin av olika släkten. Kromosomtalet är 2n=20.

!Utseende
Det är en stor art som bildar en rosett med långsmala blad, upptill 80 cm långa och bara fyra cm breda. Blomstängeln kan bli nästan en meter lång med två eller tre, mer än tjugo cm breda blommor. Blommorna går i gulgröna eller ljust gröna nyanser med toner i rött. Den dorsala sepalen är vit med ljust grön mot basen och tydliga nerver. Petalerna kan bli nästan tio cm långa, utåt, nedåt hängande, svagt vridna, snövita med två breda, längsgående, mörkrosa band. Läppen är avlång, i gulgröna färger med röda toner och små, röda prickar mot basen.

!Skötsel
De växer i varma områden med starkt indirekt solljus. Plantorna behöver vattnas med rent vatten av god kvalité och hålla komposten måste hållas fuktig hela tiden. De tål mycket vatten så länge komposten inte är för nedbruten, de är känsliga för uppbyggnad av salter. Ge endast svag gödning ett par gånger i månaden. Plantera i en väldränerad mix med god luftcirkulation, medelgrov barkkompost, sphagnum och perlit, eventuellt med tillsats av kol.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium hartwegii// Rchb.f. (1854)
//Selenipedium hartwegii// Rchb.f. & Warsz. (1854)
//Cypripedium longifolium// var. //hartwegii// A.H.Kent (1889)
//Selenipedium longifolium// var. //hartwegii// Pucci (1891)
//Paphiopedilum longifolium// var. //hartwegii// Stein (1892)
//Paphiopedilum hartwegii// Pfitzer (1894)
//Phragmipedium longifolium// var. //hartwegii//Hallier f. (1897)
__Heterotypic Synonyms__
//Phragmipedium hartwegii// var. //baderi// Roeth & O.Gruss (1997)
//Phragmipedium hartwegii// f. //baderi// O.Gruss (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=141]] 2015-10-05

































































































































































































































































































!Allmänt och utbredning
De växer epifytiskt i bergskedjan Andernas molnskogarna i norra Peru, Ecuador och Bolivia mellan 1200 och 2500 meters höjd.
Troligen är blommornas utseende anpassat för att pollineras av kolibrier.

!Utseende
Plantorna är små med korta, tillplattade ovala pseudobulber med en eller två blad i toppen. Under hösten till våren kommer från basen av de nya bulberna en mer än meterlång, smal blomstängel som kan bära hundratals tre cm små blommor i en graciös blomställning. Blommorna kan vara vita, rosa, mörkröda, röda eller rödorange. Petalerna är bredare än sepalerna och läppen är treflikad med köttiga åsar eller kölar på ytan. En gammal stängel kan bilda nya blommor.

!Skötsel
I sitt naturliga habitat i de höga bergsmolnskogarna är luftfuktigheten hög och nätterna vanligen svala året om, ofta under tio grader. Sommarnätterna bör temperaturen inte gå över 24 grader. De föredrar ljus halvskugga utan direkt sol, runt 30000 lux, och svala eller intermediära temperaturer.
De trivs bra i små krukor eller korgar med grov sphagnum eller fin, väldränerad barkkompost så de kan vattnas ofta. De behöver en viloperiod under vintern då de hålls torrare.

!Synonymer
__Homotypic Synonyms:__
//Cochlioda stricta// Cogn. (1897)
//Symphyglossum strictum// Schlechter (1919)
__Heterotypic Synonyms:__
//Mesospinidium sanguineum// Rchb.f. (1864)
//Cochlioda sanguinea// Benth. (1883)
//Symphyglossum sanguineum// Schlechter (1919)
//Symphyglossum ecuadorense// Dodson & Garay (1980)
//Odontoglossum sanguineum// Dalström (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/symphsanguinea.htm]]





















!Allmänt och utbredning
Denna storväxta epifyt växer på mosstäckta träd i Andernas låglandsbergsskogar i Nicaragua, Costa Rica, Panama, Venezuela, Colombia, Ecuador och Peru mellan 200 och 1500 meters höjd över havet.
Dess spindelliknande blommor pollineras av en spindelstingande stekel som misstar blommorna för sitt tilltänkta offer.
Artepitetet, som uttalas [ark-wee-GER-a], kan närmas översättas till "med en båge" och anspelar på blomställningens välvda växtsätt.

!Utseende
Den får ovala pseudobulber som är tillplattade från sidorna och försedda med det som är speciellt för denna art, de skarpa kanterna. Bulberna är omslutna av ett eller två täckblad och bär ett ensamt långsmalt blad från toppen av bulben. Hela plantan kan bli uppåt en halvmeter hög och lika bred, om den trivs. Under sommaren kommer blomstängeln från bulbens bas och välver sig upp och ut, växer mer eller mindre vågrätt, upptill 60 cm lång och bär sex till 15 honungsdoftande blommor. Blommorna doftar speciellt starkt kvällstid och blir mer än 20 cm stora men är väldigt variabla, även på samma blomstängel. De har långa, smala sepaler och petaler som ger den ett spindelliknande utseende, om det finns några spindlar som är gyllengula med mönster i purpur. Petalerna är ljust gröngula med brunvioletta fläckar vid basen och en ljusgul läpp med vita prickar. Under sensommaren och tidig höst har alla blommorna slagit ut och står som soldater på led längs stängeln.

!Skötsel
Ge den en ljus halvskugga utan direkt sol, bladen bränns lätt. Låt inte komposten torka ut, håll den jämnt fuktig. Under vintervilan kan vattningen minskas något.
Den kan monteras eller odlas i korg eller kruka. Den behöver en öppen, medelgrov barkkompost som låter rötterna andas. Plantera inte i för stor kruka, då krävs konstant vattning. När den börjar klättra ut ur krukan eller när komposten brutits ner är det dags för omplantering, bästa tiden är mars till april. Placera den nyaste bulben längst från krukans kant så den har gott om utrymme att växa under ett par år.

!Synonymer
__Heterotypic Synonyms:__
//Brassia lawrenceana// var. //longissima// Rchb.f. (1869)
//Brassia antherotes// Rchb.f. (1879)
//Brassia antherotes// var. //longissima// Teusch. (1961)
//Brassia hinksoniana// H.G.Jones(1974)
//Brassia longissima// Nash (25 mars 1914)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/brasarcuigera.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Brassia_arcuigera]]
[[Learn 2 grow|http://www.learn2grow.com/plants/brassia-arcuigera/]]




































































































































































































































!Allmänt och utbredning
Denna storväxta terrestriska planta kommer från Colombia och nordvästra Venezuela där den växer mellan 1000 och 2300 meters höjd.
Trots att den beskrevs först 1999, har den länge funnits representerad i herbarier som //[[Ang. uniflora|3b7f3d3b-eb5c-4364-9c8c-b556be9526aa]]//.
Den är döpt för att hedra den venezuelanska orkidéentusiasten fru Tognetti.

!Utseende
De tio till 17 cm stora pseudobulberna är mörkgröna, avlångt spolformade och bär tre tunna, ljusgröna blad med tydliga nerver som kan bli upptill 60 cm långa. Från den senaste färdiga bulben kommer en eller flera upprätta blomstänglar som blir mellan tolv och 18 cm långa och som var och en bär en, eller mer sällan två, vita, koppformade, vaxartade blommor. Blommorna är mindre än för de flesta andra arter inom släktet, knappt tio cm stora, och hållbara i flera veckor. Invändigt är de vanligen översållade med ljusrosa prickar. Blommorna som vanligen öppnar sig under senvåren, har en söt, kryddig doft.

!Skötsel
Ge den en ljus och intermediär till varm växtplats, mellan 20 och 24 grader är lagom. Under sommaren kan den tåla nästan full sol, och under vintern så mycket ljus som möjligt, så länge det inte blir för varmt.
Håll den jämnt fuktig under tillväxtperioden för att producera en kraftig ny bulb, och torrt under vintervilan för att främja knoppsättning. Vattna bara tillräckligt för att bulberna inte ska skrumpna och öka vattningen och börja ge maximalt med gödning på våren när det nya skottet kommer.
Odla dem i en fin barkkompost liknande som för //[[Cymbidium|96a115b4-bf33-4e6d-beb6-529e665f3585]]//.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/angtognettiae.htm]]
[[Indonesia Traveling|http://www.indonesiatraveling.com/flora-and-fauna-indonesia/flora/orchids-604-pages/anguloa-10-pages/11443-anguloa-tognettiae.html]]





























































































































































































































!Allmänt och utbredning
Arten upptäcktes i Ecuadors molnskogar 1993 av Mario Portilla från firman Ecuagenera. Den samlades in utan ortsnamn eller information.
Namnet kommer från latinets ''cymbi'' som betyder "båtformad" och den dimuniativa ändelsen ''-ula'' efter det karaktäristiska utseendet på synsepalen.

!Utseende
Denna miniatyrepifyt blir sällan större än tio cm och saknar pseudobulber utan de upptill tre cm långa bladstjälkarna kommer direkt från en underjordisk stam. Stjälken är omsluten av fem eller sex vita, tunna täckblad. I toppen av stjälken kommer ett ensamt ovalt till runt mörkgrönt blad, undertill översållat med purpurfärgade prickar. Bladet blir två till tre och en halv cm långt och drygt två cm brett. Framförallt under vintern till våren men i stort sett när som helst under året kan det komma en kort, en eller två cm lång, blomstängel från bladbasen på ovansidan av bladet. Den doftlösa blomman blir knappt en cm stor, med en avlångt båtformad synsepal i rosa eller rött översållad av mörkröda prickar. Utseendet på blomman gör det omöjligt att förväxla med någon annan art inom //[[Restrepia|a3a2cec3-61a6-4caa-a365-396d3bb1cf97]]//. 

!Skötsel
Arten är lättodlad om plantan kan hållas i skugga utan direkt sol, mindre än 10000 lux. Den kan växa i både svala och intermediära temperaturer om luftfuktigheten hålls hög. Den verkar klara högre temperaturer än många andra arter inom släktet. Plantera den i en mix av fin barkkompost med perlite och hackad sphagnum eller i ren sphagnum. Vattna regelbundet och håll komposten fuktig.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/rescymbula.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_cymbula]]
[[Epidendra|http://www.epidendra.org/taxones/Restrepia/Restrepia%20cymbula/restrepia%20cymbula.pdf]]

















































!Allmänt och utbredning
Det är en liten varmväxande epifytisk art från öarna Luzon, Mindanao och Visayas i den filippinska övärldens mossiga låglandsskogar mellan 300 och 1000 meters höjd.
Den hittas ibland i handeln, felaktigt, som en röd variant av den inte alls likartade //[[Ddc. arachnites|b354fd7c-2f58-492a-90c6-be20d4098e6b]]// som inte alls har såna långa, nålsmala blad, betydligt mer uttalade pseudobulber och ljust gulgröna blommor, aldrig röda, jämfört med //Ddc. wenzelii//. Arten är uppkallad efter den filippinske insamlaren Rafael Wenzel som var den första att upptäcka den. Taxonomiskt tillhör den sektionen Acoridium.

!Utseende
Den har avsmalnande pseudobulber, en till fyra cm långa och mindre än en halv cm tjocka, som bär ett enda, avlångt, läderartat blad. Bladen kan bli mer än 40 cm långa men blir bara två till fyra mm breda, med en tydlig mittnerv. Under senvintern och tidig vår kommer en 20 till 30 cm lång, upprätt till hängande blomstängel med mer än 30 små, tätt sittande blommor från bladfästet hos de senast fullbildade bulberna. De centimeterstora blommorna är vanligen klarröda men kan också vara bruna eller gulgröna. Blommorna kommer i två rader på den över tredjedelen av blomstängeln med bara några mm mellanrum.

!Skötsel
Den är lätt att odla men tycker inte om att få rötterna störda och kan sura en eller ett par år efter en omplanteringar innan den kommer igen. Ge den en ljust skuggig, 18000 till 27000 lux, och sval eller intermediär växtplats. Sommartid kan den gärna stå utomhus, den klarar lätt temperaturer ner till sex grader nattetid under en kortare period.
Ge mycket vatten av god kvalité, R/O eller regnvatten, och ge svag gödning vid varannan vattning. Vintertid kan vattningen reduceras till ungefär en gång i veckan, låt den inte torka ut helt.
Odla i en fin barkkompost med en stor andel perlite eller sphagnum.

!Synonymer
__Homotypic Synonyms:__
//Acoridium wenzelii// Ames (1922)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrocwenzelii.htm]] 2015-11-14
[[Dendrochilum.com|http://www.dendrochilum.com/page290.htm]] 2015-11-14
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dendrochilum_wenzelii]] 2015-11-14
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Dendrochilum-wenzelii&lang=en]] 2015-11-14
[[Australian Orchid Council|http://www.orchidsaustralia.com/article_Dendrochilum_wenzelii.htm]] 2015-11-14






!Allmänt och utbredning
//Bulbophyllum putidum// växer i låglandsbergsskogar mellan 1000 till 2000 meters höjd i Malaysia, Laos, Thailand, Burmas arkipelag och Vietnam.
Denna art är ofta felmärkt och säljs som //[[Bulb. fascinator|cf9732ba-7478-4329-a6d9-8139a34f4d68]]// samtidigt som många plantor märkta //Bulbophyllum putidum// faktiskt är //[[Bulb. appendiculatum|ae20a74f-4814-4f71-a115-6657d938b9cc]]//.
Artepitetet som uttalas [poo-tid-um], kommer från latinets ''putidus'' som betyder "illaluktande" eller "ruttnande" och anspelar naturligtvis på doften som blomman har.

!Utseende
De ovala, olivagröna pseudobulberna kommer med två till tre cm mellanrum på krypande jordstammar. Varje bulb bär endast ett avlångt blad. Från basen av bulben kommer en upptill 14 cm lång blomstängel som under sensommaren eller tidiga hösten bär en ensam blomma. Den klarröda blomman kan vara upptill två dm lång och doftar eller rättare sagt stinker, ruttnade kött. Kanten på petalerna är beklädda med små purpurfärgade hår. Själva läppen sitter som på ett gångjärn som gör att den vajar för minsta bris, och klämmer fast en intet ont annande pollinatör mot könspelaren och pollinerna. Den nedre delen av blomman har en skrovlig yta och över delen har ett par utskott. Blommorna håller runt en vecka innan de börjar vissna.

!Skötsel
De föredrar en varm och skuggig växtplats med bra luftcirkulation, bladen bränns lätt. Håll plantan jämnt fuktig året om, den vill inte torka ut mellan vattningarna. Med sitt krypande växtsätt odlas de med fördel monterade eller i träkorgar med väldränerad barkkompost med innehåll av perlite och sphagnum. Hemligheten är att låta den nyaste tillväxten vara nära kanten av korgen och den äldsta i centrum. På så sätt fäster den nya bulben vid träet och är mer blomvillig. Vattning varje dag om den är monterad annars tre till fem gånger i veckan.

!Synonymer
__Homotypic Synonyms:__
//Cirrhopetalum putidum// Teijsm. & Binn. (1862)
//Mastigion putidum// Garay (1994)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cirrhopetalumfascinator.htm]]
[[The Beauty of Orchids & Flowers|http://www.orchids-flowers.com/orchids/bulbophyllum-putidum/]]
[[Landscape NOW!|http://cyber-raga.blogspot.se/2011/06/bulbophyllum-putidum-syn-fascinator-2.html]]













































































































































!Allmänt och utbredning
Det är en liten, epifytisk orkidé från varma, kustnära skogarna runt 400 meters höjd i provinserna Espiritu Santo, Rio de Janiero, Sao Paulo, Parana, Santa Catarina och Rio Grande do Sul i södra och sydöstra Brasilen. 
Arten är nära besläktad med //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]// som den också tillhörde fram till 1951 då den först flyttades till //Ornithophora// där den som enda art inom släktet hörde hemma under mer än 50 år innan den 2009 flyttades till släktet //Gomesa//.

!Utseende
Det är en liten epifytisk orkidé med ovala pseudobulber, tillplattade från sidorna, som blir en halv till en cm stora. I toppen av varje bulb sitter två stycken långsmala, gräslika blad som blir upptill 20 cm långa. De små blommorna kommer under hösten på långa, smala blomstänglar som vanligen är längre än bladen. Varje stängel bär två till tio blommor som blir knappt en cm stora. Blommorna är gröngula eller grönvita med en gul läpp och purpurfärgad könspelare. Blommorna har en svag honungsdoft eventuellt med inslag av citrus.

!Skötsel
De föredrar en ljus eller ljust halvskuggig växtplats men inte full sol.
Försök hålla en hög luftfuktighet hela året med mindre vatten under vinterhalvåret. Under vår och sommar, vattna två gånger i veckan och duscha plantan dagligen, minska därefter.
Ge dem mellan 18 till 25 grader under sommaren och mellan tio till 18 grader under vinter, gärna med upptill tio graders skillnad mellan dag och natt.
Odla dem monterade eller i en öppen, fukthållande barkkompost. De har tunna rötter och ruttnar lätt om komposten är för blöt eller torkar om den är för torr. Ge dem en kort, torr vila under vintern efter att bulberna växt färdigt.

!Synonymer
__Homotypic Synonyms:__
//Sigmatostalix radicans// Rchb.f. (1864)
//Ornithophora radicans// Garay & Pabst (1951)
__Heterotypic Synonyms:__
//Ornithophora quadricolor// Barb.Rodr. (1882)

!Rekommenderad läsning
[[Orchids|http://www.orchids.co.in/orchid-plant/sigmatostalix-radicans.shtm]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/ornithophoradicans.htm]]
[[Jardim Therapy|http://jardimtherapy.com/2011/04/ornithophora-radicans/]]

;Mark W. Chase, Norris H. Williams, Aparacida Donisete de Faria, Kurt M. Neubig, Maria do Carmo E. Amaral and W. Mark Whitten, 2009
://Floral convergence in Oncidiinae (Cymbidieae; Orchidaceae): an expanded concept of //Gomesa// and a new genus //Nohawilliamsia, Oxford Journals - Annals of Botany ''104'': 387-402, 2009
:doi: 10.1093/aob/mcp067
:http://aob.oxfordjournals.org/content/early/2009/04/04/aob.mcp067.full












































!Allmänt och utbredning
En av de mest uppseendeväckande arterna från gruppen ''Latoria'' i //Dendrobium// släktet. Den är en medelstor till storväxande, varmväxande låglandsepifyt i regnskogar, mangroveträsk och molnskogar från Papua Guinea, Nya Guinea, Bougainville och Solomanöarna. Även sporadiskt som litofyt, mellan 300 och 2000 meter över havet, även om de vanligast påträffas under 500 meters höjd.

!Utseende
Plantan har pseudobulber som kan bli över 60 cm höga och lansettlika till äggformade blad. Den blommar under vintern och tidig vår, med upptill 20 stycken sju cm stora blommor på en 30 cm lång blomstjälk. Blommorna har stora, skruvade, vågiga, gula och bruna petaler, och en läpp med ränder i purpur. Blommorna kan hålla en månad eller längre, och doftar. De verkar växa och blomma bäst efter flera ostörda år, utan omplantering.

!Skötsel
En ljus, varm växtplats med hög luftfuktighet är en förutsättning för riklig blomning. Temperaturen bör ligga mellan 20 grader på natten till 30 under dagen, året runt. Den klarar av att växa i full sol, om den acklimatiseras långsamt. Vid högre ljusstyrka behövs en högre luftcirkulation för att förhindra att bladen bränns.
Arten har ingen viloperiod och bör inte torka ut helt, men vattning och gödning bör reduceras under vintern, när bulberna mognat. Vattningen kan sedan återupptas när den nya tillväxten börjar under våren. Växten vill hållas fuktig utan att vara blöt. Eftersom arten har bulber kan äldre plantor klara av att torka ut mer, speciellt när tillväxten börjar avstanna. Börjar bulberna skrumpna, öka vattningen. Gödningen bör vara kväverik, en fjärdedel av rekommenderad dos vid varje vattning, eller full dos en eller två gånger per månad.
Den odlas i en stor kruka eller korg, i grov barkkompost med god dränering. Omplanteringen sker under våren, efter blomningen och innan tillväxten kommer igång igen. Efter omplantering bör den placeras skuggigare en period.

!Synonymer
__Homotypic Synonyms:__
//Latourea spectabilis// Blume (1849)
//Callista spectabilis// Kuntze (1891)
//Latourorchis spectabilis// Brieger (1981)
//Sayeria spectabilis// Rauschert (1983)
__Heterotypic Synonyms:__
//Dendrobium tigrinum// Rolfe (1891)
//Dendrobium spectabile// f. //aurea// Christenson (2006) no specific type indicated

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denspectabile.htm]]
[[Emilys plants|http://plants.greentreewebdesign.com/denspec.html]]
[[Orchid Closet|http://orchidcloset.net/culture_files/cf_den_spectabile.html]]


























































































!Allmänt och utbredning
Det är en epifytisk eller litofytisk art från östra Himalaya i den indiska delstaten Assam, Nepal, Bhutan, provinserna Guangxi, Hainan, Tibet och Yunnan i Kina, Myanmar/Burma, Thailand och Vietnam där den växer på mosstäckta kalkstensklippor mellan 500 och 2300 meter över havet.
Taxonomiskt tillhör den underfamiljen Epidendroideae tribus Podochileae undertribus Eriinae alliansen Eria.

!Utseende
Det är en liten eller medelstor art med smala, avlånga pseudobulber som är ärtgröna för att sedan ljusna till först askgrått och sedan svart när de åldras. Bulberna kommer med en eller två cm mellanrum och blir vanligen mellan fem och 15 cm långa och mindre än en cm grova. I toppen av bulben kommer två smalt avlånga, ljusgröna blad, sex till 16 cm långa och en till fyra cm breda. Under maj till juni kommer även en tio till 30 cm lång blomstängel från toppen mellan bladen. Varje stängel bildar en lös blomställning med tre till sex stycken fem cm stora blommor i gnistrande vitt med purpurröda längsgående ränder på läppen. Blommorna håller tre eller fyra veckor och har en intensiv doft av citrus.

!Skötsel
De bör ges en halvskuggig växtplats utan direkt sol, runt 13000 lux, med svala till intermediära temperaturer. Vattna två till tre gånger i veckan och låt bara torka ut lätt mellan vattningarna. Montera på kork eller plantera i en väldränerad mix av medelgrov barkkompost med perlit eller vitmossa.
I naturen kan nattemperaturen vintertid gå ner till ett par minusgrader men i odling rekommenderas inte under sju grader. Sommartid kan temperaturen gå över 30 gradersstrecket. Minska vattningen under den svala vintervilan.

!Synonymer
__Homotypic Synonyms:__
//Coelogyne coronaria// Lindley (1841)
//Trichosma coronaria// Kuntze (1891)
__Heterotypic Synonyms:__
//Trichosma suavis// Lindley (1842)
//Eria cylindripoda// Griff. (1851)
//Trichosma cylindropoda// Griff. (1851)
//Eria suavis// Lindley (1858)
//Eria medogensis// S.C.Chen & Z.H.Tsi (1987)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/eriacoronaria.htm]] 2015-07-30
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=200028664]] 2015-07-30
[[Orchids Wiki|http://orchids.wikia.com/wiki/Eria_coronaria]] 2015-07-30






















































!Allmänt och utbredning
//Pogoniopsis// är ett dåligt känt släkte med endast <$view field="count"/> arter, endemiska för Brasilien. Arterna är saprofytiska, det vill säga de saknar klorofyll och lever istället i symbios med svampar. Liksom de flesta [[mykoheterotrofa|https://sv.wikipedia.org/wiki/Mykoheterotrofi]] växter, lever //Pogoniopsis// i halvt nedbruten lövkompost i djup skugga i täta skogar. Bara ett fåtal insamlingar av arterna har gjorts, alla runt 1100 m höjd.
//[[Pogo. nidus-avis|24d23cd4-1823-4175-ba15-5dd753490d3e]]// skiljer sig från //[[Pogo. schenckii|6c14538c-3fc7-4b70-b833-14654a1f1244]]// genom dess kortare och tjockare stam, sju till tolv cm jämfört med 15 till 25 cm för //[[Pogo. schenckii|6c14538c-3fc7-4b70-b833-14654a1f1244]]//.
Namnet är en sammansättning av det närbesläktade //[[Pogonia|d3f0ae80-6d80-4766-b3f9-f60ded2debe9]]// och det grekiska ''-opsis'' som avser "utseende", med hänvisning till likheten mellan detta släktes blommor och //[[Pogonia|d3f0ae80-6d80-4766-b3f9-f60ded2debe9]]//.

!Utseende
Arterna saknar pseudobulber utan nederdelen av stammen är istället uppsvullen.  De korta rötterna kommer direkt från basen av den uppsvällda stammen. Överdelen av stammen är tjock, köttig och ljust gulaktig. Bladen är reducerade till täckblad som mer ser ut som bruna fjäll på stammen. Blomställningen som kommer under februari och mars, utgörs av en tät klase med några få blommor. Sepalerna är gula, långsmala och lite drygt en cm långa. Petalerna är lika sepalerna men vita. Den treflikade läppen är lika stor som sepalerna, vit med orangefärgade ränder eller markeringar.

!Skötsel
Då de saknar klorofyll och är beroende av svampar för att få sin organiska näring, är det antagligen mycket svårt eller nästan omöjligt att odla dem utanför sitt naturliga utbredningsområde.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Pogonieae ''Undertribus'': N/A

----
''Typart''
//[[Pogo. nidus-avis|24d23cd4-1823-4175-ba15-5dd753490d3e]]// Rchb.f. (1881)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning
[[eMonocot|http://www.emonocot.org/taxon/urn:kew.org:wcs:taxon:162048]] 2015-12-16














































































































































!Allmänt och utbredning
En epifytisk miniatyrart från södra Ecuadors molnbergsskogar mellan 400 och 1500 meters höjd.
Den namngavs av någon obskyr anledning efter den mytologiska siaren [[Mopsus|http://en.wikipedia.org/wiki/Mopsus]], påstått barnbarn till den grekiske guden Apollo.

!Utseende
Den saknar pseudobulber utan de långa, smala bladen kommer direkt från en underjordisk stam, tätt samlade i klungor. Basen av bladen är skyddade av ett tunt täckblad. Under vintern till sommaren kommer en 15 cm lång, hängande blomstängel som bär en eller två centimeterstora blommor.

!Skötsel
Eftersom den i sitt naturliga habitat växer på lägre altituder än många andra arter inom släktet klarar den en högre temperatur än de flesta andra. Håll den skuggigt eller halvskuggigt, bladen ska vara mörkt gröna. Ge den god luftcirkulation, hög luftfuktighet och gott om vatten.

!Synonymer
__Homotypic Synonyms:__
//Masdevallia mopsus// F.Lehm. & Kraenzl. (1921)
__Heterotypic Synonyms:__
//Masdevallia triceratops// Luer (1977).

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dracmopsus.htm]]



























!Allmänt och utbredning
Denna småväxta art växer på träd och klippor i fuktiga bergsområden mellan 1100 och 1700 meters höjd i Mexiko, Guatemala, El Salvador, Honduras och Nicaragua.
Namnet kommer efter den engelske insamlaren mr Deppe som var den första att samla in arten i närheten av Xalapa i dåvarande Nya Spanien, nu Mexiko, i november 1828.

!Utseende
De upptill tio cm stora pseudobulberna är ovalt tillplattade och vid basen omslutna av pergamentliknande täckblad. I toppen av varje bulb kommer tre till fyra stora, tunna blad som faller av under hösten och lämnar efter sig ett par vassa spetsar, några mm långa, i dess ställe. Bladen är lansettlikt avlånga och kan bli en halvmeter stora.
Under senvåren, när de nya skotten börjar titta fram, kommer en eller flera upptill 15 cm långa blomstänglar som var och en bär en ensam kryddoftande blomma som kan vara mer än en decimeter breda. Sepalerna är ljust gröna med röda eller rödbruna prickar och markeringar. De små petalerna är rent vita. Den treflikade, gula läppen har ränder och markeringar i rött. Om plantan placeras torrt och svalt när blommorna öppnats kan dessa hålla sig fräscha relativt länge.

!Skötsel
Det är en av de lättaste arterna inom släktet som lätt producerar flera nya skott varje år och snabbt bildar en stor planta.
Under sommaren bör den ges full sol, hög luftfuktighet och vatten så fort komposten börjar torka upp. Sommartid odlas den med fördel utomhus så länge temperaturen inte går under 15 grader. Den kan odlas epifytiskt, i krukor eller korgar med en mix av sphagnum och barkkompost, eller en kompost av de rena biståndsdelarna. 
När bladen blir bruna och faller av på hösten är det ett tecken på att det är dags att minska vattningen och hålla plantan svalt och torrt tills de nya skotten kommer på våren. Den har en väldefinierad, två till tre månader lång viloperiod med temperaturer inte under åtta grader.
Under tidig vår innan den nya tillväxten har börjar är det lätt att, lite försiktigt, dela moderplantan i mindre bitar med ett par bulber i varje ny planta.

!Synonymer
__Homotypic Synonyms:__
//Maxillaria deppei// Lodd. (1832)
__Heterotypic Synonyms:__
//Deppia mexicana// Raf. (1837)
//Lycaste leiantha// Beer (1854)
//Maxillaria leiantha// Beer (1854)
//Lycaste deppei// var. //major// Stein (1892)
//Lycaste deppei// var. //pallida// Stein (1892)
//Lycaste deppei// var. //viridis// Smee (1893)
//Lycaste deppei// var. //praestans// Linden (1898)
//Lycaste deppei// var. //rosea// Oakeley (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/lycdeppei.htm]]
[[Santa Barbara Orchid Estate|http://www.sborchid.com/plantdisplay.php?ocode=LYC000020]]




















!Allmänt och utbredning
Arten är endemisk för Mt Kinabalu, Borneo, där den växer varmt i lövhumus under bambu på kalkstensgrund mellan 300 och 1450 meters höjd. Den har ett mycket distinkt utseende, men kan vara besvärlig att odla då den tillväxer långsamt och är svår att få att blomma.
Fowlie (1983) definierar två grupper av //Paph. dayanum//, en stor låghöjdtyp som växer runt 500 meters höjd och en mindre höghöjdtyp med sin utbredning över 900 meter. Låghöjdstypen beskrivs ha "huge, six-inch diameter flowers with faded petals but vivid green leaves with dark checkerboard markings, reminiscent of Paphiopedilum lawrenceanum var. coloratum". Höghöjdstypen beskrivs ha "four-inch diameter flowers, the petals and pouch of which are suffused deep pink and the leaves are darker green with more irregular dark mottling. This high elevation race has two distinct ecotype leaved patterns, one bright green and one gray-green".
//Paph. dayanum// hybridiserar ibland naturligt med //[[Paph. javanicum var. virens|265a9b4f-971a-45d2-a42b-5d524c87368b]]//. Rolfe föreslog år 1896 att //Paphiopedilum burbidgei// och //Paphiopedilum petri// både representerade exempel på denna naturliga hybrid. Cribb (1998) höll med om att //Paph. burbidgei// är den naturliga hybriden, men att //Paph. petri// är likvärdig med //Paphiopedilum dayanum//.
Artepitetet kommer för att hedra [[John Day of Tottenham|http://en.wikipedia.org/wiki/John_Day_%28botanist%29]], en botaniker, orkidéodlare och målare från 1800-talets England, känd för att ha målat mer än 4000 orkidéillustrationer under 15 års tid.

!Utseende
De fyra till sex bladen blir upptill 25 cm långa och fem cm breda, mönstrade i mörkt- och gulgrönt. Liksom hos alla //Paphiopedilum// skickar varje bladrosett bara ut en blomstängel och bildar sedan ett nytt sidoskott och tynar därefter bort. Blomstängeln kan bli mer än 30 cm lång och bär endast en blomma. I det vilda är den primära blomningstiden mars till maj, i odling på den norra hemisfären blommar den vanligen under sommaren med ibland en andra blomning under vintern. Den övre sepalen på varje blomma är prydd med gröna och bruna längsgående ränder, medan de laterala petalerna är lila.

!Skötsel
I dess naturliga habitat är sommaren och hösten perioder med låga temperaturer och få men kraftiga regn, medan våren är den varmaste och fuktigaste med ständiga duggregn. Den är alltså van vid hög luftfuktighet, och trivs bäst i halvskugga. 
Odla i väldränerande kompost, gärna barkkompost med en andel perlite. Vattna regelbundet var fjärde till var femte dag.
Ge den en lägre temperaturer på vintern för att inducera blomning.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium spectabile// var. //dayanum// Lindley (1860)
//Cypripedium dayanum// Rchb.f. (1862)
//Cordula dayana// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium dayi// B.S.Williams (1862)
//Cypripedium petri// Rchb.f. (1880)
//Cypripedium ernestianum// L.Castle (1887)
//Cypripedium peteri// Rchb.f. (1887), orth. var.
//Paphiopedilum petri// Pfitzer (1894)
//Paphiopedilum dayanum// var. //petri// Pfitzer (1903)
//Cordula petri// Rolfe (1912)

!Rekommenderad läsning
[[Gore Orchid Conservatory|http://www.goreorchidconservatory.com/SpecPgs/Paph-dayanum.html]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphdayanum.htm]]
[[SlipperOrchids|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/dayanum/index.html]]
[[Orchid Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_dayanum]]















!Allmänt och utbredning
Arten är en medelstor, sympodial epifyt som är vittspridd över områden från Trinidad till Columbia, Costa Rica, Ecuador, Venezuela och Panama. De växer från 400 till 1200 meter över havet i relativt torra höglandsskogar och fodrar därför inte speciellt mycket vatten. I handeln används fortfarande ofta det gamla namnet //Oncidium papilio//.
Kromosomtalet är 2n=38.

!Utseende
Plantan blir två till tre dm hög, med fem cm stora pseudobulberna tätt ihopklumpade. De veckiga bulberna är ovala, nästan runda, med ett enda blad från toppen av varje bulb. Arten har blad som utseendemässigt skiljer sig från de flesta andra inom orkidésläktet, mest av allt liknar de åsneöron. Bladen är styva, grågröna med röda eller purpurfärgade markeringar. Tillsätt lite kalk till komposten för att behålla bladens vackra färger.
Blommorna öppnar sig i slutet av en lång, slank blomstängel som vippar för minsta vindfläkt. Stängeln kommer från bulbens bas och kan till slut bli över en meter lång. Endast en blomma i taget är öppen, men den är utslagen en eller två månader och det kan komma nya blommor successivt över flera månader eller år på samma stängel, så klipp inte stängel förrän den är helt brun och död. Blomman blir upptill 15 cm stor och är tigerfärgad i gult med kastanjebruna strimmor och vad som ser ut som tre smala, rödaktiga antenner bildade av petalerna och den dorsala sepalen. Läppen är gul med markeringar i orangebrunt eller rödbrunt, och med en tunn, gul, vågig kant. Den upprätta könspelaren har vingar med håriga kanter, och antennlika utskott ovanför vingarna.
Plantan kan ibland förväxlas med //[[Psychp. krameriana|7e6de62f-e760-469d-a6e5-5308c303d105]]//. De båda arterna kan särskiljas genom den övre delen av blomstängeln. Hos //Psychp. papilio// är stjälken bred och tillplattad, jämfört med helt rund hos //[[Psychp. krameriana|7e6de62f-e760-469d-a6e5-5308c303d105]]//.

!Skötsel
Från sitt naturliga habitat är //Psychp. papilio// van vid kraftiga regn från sen vår till tidig höst, och en dagstemperatur runt 27 grader och nattetid ner till 17-18 grader. Under vinterns viloperiod bör nattemperaturen gå ner ytterligare tre-fyra grader. Variationen i dess stora utbredningsområde gör att den även kan adaptera sig till ett par tre grader högre än så. Hög luftfuktighet och en kraftig temperatursänkning nattetid tillsammans med dimma och låga moln ger regelbunden och mycket riklig dagg.
De behöver därför regelbunden vattning under tillväxtperioden, och sedan snabbt torka upp igen eftersom dess tunna rötter lätt ruttnar om den står för blöt. Under de varmaste dagarna sommartid innebär det vattning varannan eller var tredje dag, med en fjärdedel till halva den rekommenderade dosen gödning varje vecka. De verkar föredra ganska stora givor med kalcium, framförallt behövs det för att bibehålla de vackra färgerna på bladen. Vintertid kan det räcka med en vattning varannan vecka och enstaka morgonduschar. 
De växer och blommar villigt även under svala och skuggigare villkor, och de föredrar skuggigare ljusförhållanden än //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// men de kan klarar stark sol om luftcirkulationen och -fuktigheten är tillräckligt hög. Plantorna odlas oftast monterade eller i små, grunda lerkrukor eller korgar, i en väldränerad, öppen kompost, gärna med inslag av mossa eller perlite, trädormbunke och träkol.
De vill inte bli omplanterade för ofta, så genom att använda en kompost som snabbt torkar upp efter en vattning och små krukor förlängs tiden innan en omplantering blir nödvändig. När den behöver planteras om är våren, när rötterna börjar tillväxa, den lämpligaste tiden. Rötterna kan komma samtidigt som blomstänglarna börjar dyka upp. Stänglarna bör tas bort vid planteringen så växten får mer kraft till rötternas tillväxt. Efter att plantan tagits ur krukan bör den få dra i en lösning av en rotstimulerande lösning ett par timmar. Därefter bör den få torka ett par veckor innan den planteras i ny kompost. Under denna tid måste den sprayas varje morgon, men inte vattnas på något annat sätt. På så sätt får den tid att etablera nya rotskott. När den planteras, se till att rötternas tillväxtpunkt hamnar under kompostens yta så rötterna växer ner i komposten och inte upp i luften. Vattna bara lätt tills plantan är ordentligt etablerad igen och de nya rötterna ett par cm långa.
De är känsliga för svamp och bakterieangrepp, som kan motverkas med torrare förhållanden. Bra luftcirkulation hjälper också till att förhindra svamp.

!Synonymer
__Homotypic Synonyms:__
//Oncidium papilio// Lindley (1825)
__Heterotypic Synonyms:__
//Psychopsis picta// Raf. (1838)
//Oncidium papilio// var. //limbatum// Hooker (1839)
//Oncidium papilio// var. //albiflorum// Rchb.f. (1855)
//Oncidium papilio// var. //latourae// Broadway (1927)
//Oncidium papilio// f. //latourae// Hawkes (1952)
//Psychopsis latourae// H.G.Jones (1976)
//Psychopsis papilio// var. //latourae// Lückel & Braem (1982)
//Psychopsis papilio// var. //albiflora// Lückel & Jenny (1999)
//Psychopsis papilio// f. //latourae// Lückel & Jenny (1999)

!Rekommenderad läsning
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS248.html]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/psychopsispapilio.htm]]
[[Carter and Holmes Orchids|http://www.carterandholmes.com/oncindpapcare.html]]
[[OrchidWeb|http://www.orchidweb.com/orchidofweek.aspx?id=169]]

!Allmänt och utbredning
Det är en liten epifytisk art endemisk för norra och västra delarna av Sumatra där den växer i sprickor och fickor med lövkompost på kalkstensklippor mellan 760 och 1800 meters höjd över havet. //Paph. tonsum// är i dag ovanligt i naturen med ett begränsat utbredningsområde som är mycket påverkat av människan. Den tidigare rikligt förekommande arten hade 1971 samlats in till gränsen för utrotning men återupptäcktes senare. Förekomsten har minskat betydligt under de senaste årtiondena och antalet vuxna individer är nu under 2500 individer med en minskningen upptill 80% under de tre senaste generationerna.
Artepitetet //tonsum// kommer från det latinska ''tondeo'' som betyder "rakade" eller "klippas" och anspelar på avsaknaden av hår på petalerna. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Punctatum. Kromosomtalet är 2n=32.

!Utseende
//Paph. tonsum// är ganska variabel både i plantans och blomman storlek samt i petalernas form och färg, och även formen på staminodiden. Den bildar fem till sju avlångt elliptiska blad som är upptill 20 cm långa och fem cm breda. Bladen är mörkgröna med mönster i ljust grågrönt och många plantor har en purpurfärgad undersida med en tydlig köl. Under höst och vinter kommer en 30 till 38 cm lång blomstängel som bär en enda glänsande blomma upptill 14 cm stor. Blomman har en ljusrosa dorsal sepal ådrad i grönt och mörklila. De utsträckta petalerna är olivfärgade till svagt gulgröna med mörkare gröna nerver och ibland med nyanser i matt purpur, med ett par svarta vårtor mot basen. Läppen är grön till olivbrun med rosa nyanser och har mörkare brun eller rödbrun ådring.

!Skötsel
I dess naturliga utbredningsområde utsätts den för kraftiga skyfall från sommar till höst och ofta återkommande regn från vinter till vår. Ge den en växtplats med måttligt starkt ljus, någonstans mellan //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// och //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, och intermediära till varma temperaturer. Ge mer skugga på sommaren, och hålla den ljusare på vintern. Om bladen blir gula eller bleks kan det vara ett tecken på att de får för mycket ljus.
Odla i en väldränerad mix av medelgrov barkkompost och perlit. Håll den jämnt fuktig, vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning minska temperatur och vattning under vintern.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium tonsum// Rchb.f. (1883)
//Cordula tonsa// Rolfe (1912)
__Heterotypic Synonyms:__
//Paphiopedilum tonsum// f. //alboviride// Braem (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphtonsum.htm]] 2015-08-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_tonsum]] 2015-08-28
[[Orchid photographs by Gary Yong Gee|http://www.yonggee.name/Notes/Paph_tonsum.htm]] 2015-08-28
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/tonsum/index.html]] 2015-08-28
[[The Gore Orchid Conservatory|http://goreorchids.com/SpecPgs/3d-tonsum/tonsum-spin.html]] 2015-08-28

!Allmänt och utbredning
Det är en sällsynt, epifytisk art som bara blivit funnen vid två tillfällen. Den växer i de svala, fuktiga bergsskogarna i bergskedjan Cordillera, västra Anderna, i de colombianska distrikten Chocó och Antioquia, mellan 1800 och 2000 meters höjd.
Namnet har den fått från det distrikt där den först upptäcktes, Chocó, i nordvästra Colombia.

!Utseende
Det är en liten art som saknar pseudobulber utan tunna hårlika rötter och med en upprätt bladstängel omsluten av fyra eller fem vita, svartprickiga täckblad. I toppen av bladstängeln sitter ett ensamt tjockt, läderartat, ovalt blad. Från basen av bladet kommer en tre cm lång blomstängel. De två cm breda blommorna utvecklas en i taget på undersidan av bladet. Den långa, dorsala sepalen är upprätt och slutar i en tjock, klubbliknande spets. De långa laterala petalerna är likaledes klubblika. De sammanväxta laterala sepalerna är kluven i spetsen och mycket färggrann i gulbrunt med röda och purpurfärgade prickar. Den kortare, ovala läppen har samma färgschema och markeringar.

!Skötsel
Håll plantan skuggigt och i svala eller intermediära temperaturer. Plantera den i en mix av fin barkkompost med perlit eller sphagnum. Vattna regelbundet och håll komposten jämnt fuktig.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/reschocoensis.htm]]


























































































!Allmänt och utbredning
Arten återfinns mestadels epifytiskt på smala trädgrenar i subtropiska områden av Kina, Japan och Korea, men den kan även växa på stenar och klippor mellan 400 och 1200 meters höjd över havet.
Den pollineras av nattaktiva svärmare.
I Japan är arten känd som ''furan'' eller ''fukiran'',"samurajorkidé", efter dess historiska betydelse. Den är i framförallt Japan odla under många århundraden av överklassen där den var högt värderad, men den beskrevs vetenskapligt först av Carl Peter Thunberg 1784 i hans bok ''Flora Japonica'' under namnet //Orchis falcata//. Den hade dock beskrivits tidigare under namnet ''Igansai-ranpin'' i ett japansk verk av Jo-an Matsuoka under kejsare Cheng-te 1728.
Artnamnet kommer från latinets ''falcátus'' som betyder "formad som en skära", svängd, efter bladens utseende. Den återfinns i handeln fortfarande nästan uteslutande under sitt gamla namn //Neofinetia falcata//.
Kromosomtalet är 2n=38.

!Utseende
Växtsättet är monopodialt, med flata, kölade, nållika blad som blir fem till tio cm långa. Bladen är oftast ljust gröna, men de kan även få vita, längsgående markeringar. De får inga psudobulber, utan bara en kort stam från vilkens bas det lätt bildas nya skott. Plantan kan bli från sju cm hög till ungefär det dubbla. Växten producerar en eller flera korta blomstänglar under sommaren eller tidiga hösten, med två till tio blommor på varje stängel. Blomstänglarna kommer oftast vid bladbasen av det tredje bladet från toppen. De hållbara blommorna är vaniljdoftande, speciellt nattetid, och blir cirka tre cm tvärs över i rent vitt, med en fem cm lång, smal nektarsporre. De dorsala sepalerna och petalerna viker sig utåt, den laterala sepalen bockar utåt, nedåt. Läppen är treflikad och böjer sig mot könspelaren.

!Skötsel
På sina naturliga växtplatser får den under vintermånaderna mycket solljus, 20000 till 36000 lux, kraftiga vindar samt mindre regn än under sommaren. Temperaturerna ligger mellan tio och femton grader under vintern med nattemperaturer ner till fyra grader men det är nog inte helt nödvändigt att i odling sänka temperaturen så kraftigt. På sommardagarna ligger temperaturen mellan 20 och 30 grader och under nätterna runt 20 grader. Luftfuktigheten är relativt hög hela året. I sitt naturliga habitat får växten det starkaste ljuset under vintern, så den behöver skuggas under sommaren och så mycket sol som möjligt, utan att bränna bladen, resten av året. Arten växer ofta diagonalt ut från trädgrenarna för att minimera risken för att vatten ska bli stående i bladvecken. Vår, sommar och höst bör man ge plantan mycket vatten. Under vintervilan kan det räcka med en spraydusch om morgon och en lätt vattning varannan vecka. Plantan bör ges svag gödning, en fjärdedels till en halv dos, varje vecka under tillväxten. Arten vill helst inte torka ut, så att odla den i sphagnum är att rekommendera. Plantorna kan planteras i små krukor där rötterna lindas med sphagnum och "skruvas" ner i krukan eller monteras på en korkbit med på en kudde av sphagnum. I Korea odlas arten ofta på en mossbeklädd, upp och ner vänd kruka, inuti en annan kruka, för att illustrera att den växer på ett mossberg. Plantera eller montera plantan så att den står snett, eller vertikalt om det går då plantan är extremt känslig för stående fukt i bladfästena. Vid omplanteringen under senvintern eller tidig vår är det lätt att bryta rötterna. Klipp eller riv aldrig av brutna rötter, de lever fortfarande. Alla döda och ruttnade rötter ska däremot alltid tas bort.

!Synonymer
__Homotypic Synonyms:__
//Orchis falcata// Thunb. (1784)
//Limodorum falcatum// Thunb. (1794)
//Angraecum falcatum// Lindl. (1821)
//Oeceoclades falcata// Lindl. (1833)
//Aerides thunbergii// Miq. (1866)
//Vanda pygmaea// H.Laurentius (1868) nom. superfl.
//Angorchis falcata// Kuntze (1891)
//Angraecopsis falcata// Schlechter (1914)
//Finetia falcata// Schlechter (1918)
//Neofinetia falcata// Hu (1925)
//Nipponorchis falcata// Masam. (1934)
//Holcoglossum falcatum// Garay & H.R.Sweet (1972)
__Heterotypic Synonyms:__
//Oeceoclades lindleyi// Regel (1866)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Neofinetia_falcata]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/neofinetiafalcata.htm]]
[[YouTube|http://www.youtube.com/watch?v=13pzcXgVM6Q]] omplantering av en planta
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS344.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Neofinetia_falcata]]
[[a n g r e k.com|http://angrek.com/AAOS/Past/9701/Txt/Neofin.html]]

























































































































''Etymology:'' 
From the Greek chamai, lowly or on the ground, and Gastrodia, an aphyllous orchid genus. The type superficially resembles a diminutive Gastrodia species.























































!Allmänt och utbredning
Arten har bara påträffats på en lokal med mindre än 50 individer i provinsen Thai Nguyen i norra Vietnam och är den arten i Vietnam med minst utbredning, bara 10 km^^2^^. Den växer litofytiskt eller sällan terrestriskt i fuktiga skogar eller skuggig i mossfyllda sprickor i kalkstensklippor mot norr eller nordväst mellan 350 och 550 meters höjd. Den samlas först in 1997 och exporterats olagligt. Många tusentals växter har sannolikt samlats men alla exemplar av //Paph. vietnamense// i internationell handel har sannolikt sitt ursprung från en enda källa.
Den är, naturligtvis, uppkallad efter sitt ursprungsland, Vietnam. Den är nära släkt med //[[Paph. delenatii|6b25e950-ad91-4c12-8e96-c83dc84b4a11]]// men skiljer i storlek, bladform och att blomman är betydligt mer åt det rosaröda hållet. Taxonomiskt tillhör den undersläkte Parvisepalum.

!Utseende
Den är en liten kompakt art som bildar en rosett med tre till fem avlångt ovala blad, åtta till 15 cm långa och två till sju cm breda, mönstrade i ljust grågrönt och mycket mörkt grönt, ibland också med en vit kant. Undersidan är nästan helt täckt med purpurfärgade prickar och med en tydlig, längsgående köl. Under senvintern till tidig vår kommer en upprätt, 15 till 25 cm lång, lila eller rödbrun blomstängel täckt med vita hår. Stängeln bär en eller två blommor som är stora i förhållande till plantan med sin tio till tolv cm. Blommorna liknar mycket de hos //[[Paph. delenatii|6b25e950-ad91-4c12-8e96-c83dc84b4a11]]//, i olika rosa nyanser och svagt doftande. Den dorsala sepal blir vit till ljusrosa. Petalerna är rosa till rosalila. Läppen är mörkrosa. Staminode är gul med en central gulgrön fläck.

!Skötsel
Den typiska livsmiljön är smala hyllor under överhängande klippor och plantan överlever en fyra till fem månader lång torrperiod under den svala vintern. Utbredningsområdet är torrt med hög luftfuktighet från senhösten till tidig vår och får kraftiga regn från vår till tidig höst.
Den bör ges en växtplats med måttligt ljus och intermediära till varma temperaturer. Odla i en medelgrov mix av barkkompost och perlit med tillsats av kalk. För att inducera blomningen behövs minst en vecka under vintern med minskad vattning. Mer skugga och svalare temperaturer under blomningen kommer producera mörkare färger och mer varaktiga blommor. Låt helst inte temperaturen sjunka under 15 grader. Vattna två gånger i veckan under sommaren och inte mer än en gång i veckan under vintern.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum hilmarii// Senghas & Schettler (1999)
//Paphiopedilum mirabile// Cavestro & Chiron (1999)
//Paphiopedilum vietnamense// f. //album// O.Gruss & Koop. (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphvietnamensis.htm]] 2015-09-09
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/parvisepalum/vietnamense/index.html]] 2015-09-09
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_vietnamense]] 2015-09-09
[[Dr. Tanaka's Homepage|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/newpaph8.html]] 2015-09-09
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/3d-vietnamense/vietnamense-spin.html]] 2015-09-09


































































































































































































































































































!Allmänt och utbredning
Arten förekommer endemiskt i primärskogar på Java mellan 700 och 2000 meters höjd över havet. Fast den växer över hela Java är den inte någon vanligt förekommande orkidé.
Det finns två accepterade varianter av denna art, 
//Ddc. abbreviatum// var. //abbreviatum// och //Ddc. abbreviatum// var. //remiforme// J.J.Sm. (1904).

!Utseende
Det är en liten till medelstor art som sällan blir större än 25 cm stor, med mörkgröna, avlångt spolformade pseudobulber som kommer med upptill fem cm mellanrum på en underjordisk stam. Varje bulb är drygt fem cm lång och en halv cm tjock med ett enda avlångt, utdraget spetsigt, 30 cm långt och tre cm brett, läderartat blad i toppen. Under vår och sommar innan bladen utvecklas kommer från årets nya skott en upptill 30 cm lång blomstängel som kan bära mer än 30 stycken centimeterstora blekgröna blommor som är hållbara några dagar.

!Skötsel
Den är varmväxande och trivs bäst i en ljus skugga. Den behöver hållas jämnt fuktig hela året utan någon viloperiod. Plantera om vartannat år i en mix av medelgrov barkompost med tillsats av perlite och sphagnum.
Nattemperaturen bör inte gå under 16 grader och dagtid kan den ligga mellan 18 och 30 grader. 

!Synonymer
__Homotypic Synonyms:__
//Platyclinis abbreviata// Benth. (1881)
//Liparis abbreviata// N.E.Br. (1882)
//Acoridium abbreviatum// Rolfe (1904)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrocabbrevaitum.htm]] 2015-01-23
[[Dendrochilum|http://www.dendrochilum.com/page4.htm]] 2015-01-23




























!Allmänt och utbredning
Den återfinns litofytiskt i lövkomposten i kalkstensklippornas sprickor längs floden Kapuas River i sydöstra Kalimantan på den indonesiska delen av Borneo runt 550 till 960 meters höjd. Den påträffas ofta växande så den får morgonsol men med skugga resten av dagen. Den är sällsynt med ett litet utbredningsområde och populationen har minskat kraftigt senaste decennierna.
Liksom åtminstone //[[Paph. kolopakingii|f72a725d-1ff8-4f0e-b6a8-50c69f7842a8]]// och //[[Paph. adductum|cc406188-d9bf-4552-8923-2f15f7070991]]// producerar //Paph. supardii// droppar av sav på baksidan av den dorsala sepalen och utvecklar små ränder och fläckar av material på sepalen och läppen som påminner om insektsägg.
Arten är uppkallad efter den indonesiske orkidésamlaren Supard som var den som samlade in den på 1980-talet. Den upptäcktes som ett herbariumexemplar 1915, men förbisågs och ignoreras, för att sedan återupptäckas 1975 som //Paph. victoria// och 1982 som //Paph. devogelii//. Även om arten varit känd i hundra år, är den fortfarande ganska sällsynta i odling, förmodligen på grund av sin begränsade utbredning på Borneo.Taxonomiskt tillhör den undersläkte Polyantha sektion Mastigopetalum. Kromosomtalet är 2n=26.

!Utseende
Det är en stor art med sju till nio långsmala, glänsande klargröna blad som blir mellan 30 och 50 cm långa och tre till sex cm breda. Den blommar under vår och försommar på en 30 till 40 cm lång, upprätt, purpurröd blomstängel som kan bär tre till sju samtidiga blommor. Blommorna blir sex till tio cm stora, ljust gula eller gulgröna med purpurbruna ränder på den dorsala sepalen. De vridna petalerna är översållade med små, rödbruna prickar. Läppen är gul eller vit med nyanser i ljust eller mörkt rödbrunt och nerver i purpur. Staminoiden är gul med bruna hår.

!Skötsel
Det är en relativt lätt art att odla, precis som många andra av släktets arter med långa, smala blad. Ge den en halvskuggig växtplats med varma temperaturer under dagen, rötter som inte är ständigt blöta utan får torka ut mellan vattningarna, hög luftfuktighet och -cirkulation, och en markant sänkning av nattemperaturen under hösten. Den tillväxer långsamt och småplantor kan verka ta orimligt lång tid för att nå blomstorlek.
Dess naturliga utbredningsområde utsattes för kraftiga regn på vintern och något mindre nederbörd från vår till höst. Odla i en väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphsupardii.htm]] 2015-08-26
[[Antec Laboratory & Ladyslipper Farm page|http://www.ladyslipper.com/0208-04.htm]] 2015-08-26
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_supardii]] 2015-08-26










































































































!Allmänt och utbredning
Det är en medelstor terrestrisk art som växer i skrevor av kalkstensklippor och på sandiga, öppna grässlätter under träd och buskar i södra Indien mellan 1000 och 2000 meters höjd. Det troddes länge att den försvunnit helt från det vild efter en skogsbrand som förstörde den ursprungliga populationen, men under slutet av 1980-talet återfann forskare flera små populationer på berget Agasthymalai i distriktet Thiruvananthapuram i den indiska delstaten Kerala runt 1500 meters höjd. Det är den enda arten inom släktet som växer i södra Indien, och återfinns mer än 2000 km från närmaste andra paphiopedilumart.
Fortfarande marknadsförs hybriden //Paph. Winnianum//, en korsning mellan //Paph. druryi// och //[[Paph. villosum|4ada762d-92fa-465b-aee9-f1c979290f41]]//, i handeln som "artificiellt förökade" naturarten //Paph. druryi//. Hybriden kan dock lätt identifieras på de hängande bladen som den rena arten aldrig har.
Arten är uppkallad efter överste H. Drury, som var felaktigt krediteras som upptäckaren. Drury förvärvade plantorna från den verkliga upptäckaren, mrs. J.A. Brown, som fann dem 1865. Taxonomiskt tillhör den undersläktet Paphiopedilum, sektionen Thiopetalum och den är närasläkt med //[[Paph. insigne|934467c2-affb-4953-9648-19483b018d30]]// och //[[Paph. exul|22fbd62d-8746-4d6b-b866-0055c6b01690]]//. Kromospmtalet är 2n=30.

!Utseende
Det är en kraftig planta med upprätta, aldrig hängande, glänsande gröna blad som kan bli upptill 30 cm långa och två till fyra cm breda. Under senvår och sommaren kommer en ensam, sju cm stor blomma på den upptill 30 cm långa blomstängeln. Den är tillsammans med //[[Paph. concolor|e52e6d13-4a32-4f18-b6aa-29ff7f43bb6c]]// och //[[Paph. armeniacum|55cd05d6-abf6-4bf0-aa98-5b11403f99d6]]// en av endast tre arter inom släktet som får gula blommor. De långa petalerna och den dorsala sepalen är mörkgula med lila ränder från basen till spetsarna. Läppen är gul med en ton av brunt. Blommorna är svag doftande och mycket hållbara, med svalare nätter kan de blomma under två månader eller mer.

!Skötsel
Det är en tålig art som i naturen kan växa i nästan full sol, bara skuggad av det långa gräset den växer bland. Januari till april är torra månader, resten av året är fuktig utan överdriven väta. De förökar sig med långa, träaktiga utlöpare som kan bli en och en halv meter långa, så den snart letar sig ut ur varje kruka den planteras i. De är ovanligt ljuskrävande för en //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]// och behöver mycket ljus utan direkt sol, 25000 till 35000 lux, och intermediära eller varma temperaturer. Vintern är den ljusaste tiden i naturen och då behöver den så mycket ljus som möjligt utan att bränna bladen.
Plantera i en väldränerad kompostmix med medelgrov bark och perlit. Den vill ha en jämn fuktighet och inte torka ut så mycket mellan vattningarna men heller inte vara för fuktig ofta. Vattna regelbundet ungefär var fjärde till var femte dag.
Den är inte helt lätt och tillväxer långsamt, nya bladrosetter kan ta tre år på sig innan de är fullt utvecklade.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium druryi// Bedd. (1869)
//Cordula druryi// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphidruryi.htm]] 2015-04-24
[[ARKive|http://www.arkive.org/ladys-slipper-orchid/paphiopedilum-druryi/video-01.html]] 2015-04-24
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/paphiopedilum/druryi/index.html]] 2015-04-24
[[ENVIS Centre on Floral Diversity|http://www.bsienvis.nic.in/CITES/Paphiopedilum%20druryi.pdf]] 2015-04-24
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_druryi]] 2015-04-24
[[Paphiness Orchids|http://paphinessorchids.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=61&category_id=1&manufacturer_id=0&option=com_virtuemart&Itemid=1]] 2015-04-24

;J. Mammen & V. Mammen, 1974
://Rediscovering //Paphiopedilum druryi// on Southern India//
:Orchid Digest, 38(1): 31 - 36









!Allmänt och utbredning
De <$view field="count"/> arterna inom släktet //Selenipedium// återfinns från Panama i söder, Costa Rica, Trinidad, Franska Guinea, södra Colombia, Ecuador och Amazonas avrinningsområde i Brasilien upptill 900 meters höjd över havet.
Alla arter av detta central- och sydamerikanska guckuskosläkte är mycket sällsynta och mycket lite är känt om dem. De anses allmänt som ett primitivt förstadium till //[[Paphiopedilum|4de37127-aa20-4dc8-9397-38b26a47ba20]]// och //[[Phragmipedium|64b911cb-2954-4ad9-be8b-1a5dda3a5b38]]//. Frökapslarna hos släktets arter, framförallt //[[Sel. chica|545a19a0-b438-45f3-9aa1-c80ca6a44cdd]]//, har tidigare används som substitut för vanilj men numera odlas de inte kommersiellt i någon större utsträckning. 
Namnet kommer från det grekiska ''selen'' som betyder "måne" och ''pedium'' som betyder "toffla" efter den säregna formen på blommans läpp.
<$reveal type="nomatch" state="$:/temp/state-c4ef2d0f-50ab-449c-b861-30b4379c3318" text="show">
<$button set="$:/temp/state-c4ef2d0f-50ab-449c-b861-30b4379c3318" setTo="show">visa mer info om sektionerna</$button></$reveal>
<$reveal type="match" state="$:/temp/state-c4ef2d0f-50ab-449c-b861-30b4379c3318" text="show">

Den mest välkända arten är //S. palmifolium// Rchb.f. från Venezuela, Guyana, Surinam, Franska Guyana och norra Brasilien.
De övriga arterna har ett mycket mer begränsat utbredningsområde:
//[[Sel. aequinoctiale|be74b9ff-b3ad-463a-a0e4-f721c3e7cee1]]// Garay är endast känd från nordvästra Ecuador och angränsande områden i Colombia;
//[[Sel. chica|545a19a0-b438-45f3-9aa1-c80ca6a44cdd]]// Rchb.f. är endemisk till Panama;
//[[Sel. isabelianum|c893dda4-273d-4476-a7c2-d22eebd2600a]]// Barb. Rodr. återfinns i östra Brasilien;
och
//[[Sel. steyermarkii|77bc53af-1009-4516-bebc-293665f52159]]// Foldats från Venezuela;

<$button set="$:/temp/state-c4ef2d0f-50ab-449c-b861-30b4379c3318" setTo="hide">dölj</$button>

</$reveal>

!Utseende
Alla arterna är ganska stora plantor med relativt små blommor. Den bildar en bambuliknande stam som kan nå upp till 3 meter med tunna, långsmala blad alternerande längs hela längden. Bladen blir upptill 20 cm långa och tre till fyra cm breda. I toppen av stammen bildas successivt nya, två till tre cm stora blommor. Könspelaren har två fertila ståndarknappar, en på varje sida om ståndaren i centrum som täcker övre delen av könspelaren. Sepaler och petaler är relativt lika, i ljusa färger. Läppen är rund med tjocka, inrullade kanter.

!Skötsel
Med några få undantag i Sydamerika är det sällan de återfinns i odlingar. De är svåra att föröka, växer långsamt, plantorna stora och blommorna små, så ersättningen för alla odlarmödor är litet. Arterna anses som de svåraste orkidéerna att odla. De föredrar en växtplats med hög luftfuktighet, varma temperaturer och diffust ljus. Plantera i lika delar sand och fibrer av trädormbunke. Vatten generöst med vatten av god kvalité, R/O eller regnvatten, låt dem inte torka ut och ge svag gödning.

!Taxonomi
''Underfamilj'': Cypripedioideae ''Tribus'': Selenipedieae ''Undertribus'': Selenipedinae

----
''Typart''
//[[Sel. chica|545a19a0-b438-45f3-9aa1-c80ca6a44cdd]]// Rchb.f. (1854)

----
''Uttal''
Sel-eni-PE-dium

----
''Synonymer''
__Heterotypic Synonyms:__
//Selenipedilum// Pfitzer (1888)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Selenipedium]] 2015-11-30
[[Selenipedium Observations|http://cyps.us/selen/culture.html]] 2015-11-30

;Phillip Cribb & Andre Schuiteman, 2015
:A new species of Selenipedium (Orchidaceae: Cypripedioidaea) from Ecuador, Lankesteriana 15(3): 179–182,
:doi: http://dx.doi.org/10.15517/lank.v15i3.21109
:http://www.lankesteriana.org/lankesteriana/Lankesteriana%2015%283%29/05_cribb_et_schuiteman.pdf
!Allmänt och utbredning
//Sarco. hartmannii// är en litofytisk, sällan epifytisk art. Den växer upp till 900 meters höjd, inte nära havet, från Hasting på södra Australien till åtminstone så långt norrut som Noosa. Denna art växer oftast på utsatta klippor, men kan också återfinnas i mer skuggiga områden nära vattendrag. De föredrar hög luftfuktighet utan att stå i vatten.

!Utseende
Plantan är liten till medelstor. Bladverket är vandalikt med sex till åtta alternerande blad i ett tillplattat plan, och bladen är smala, avlångt lansettlika.
Den blommar under senvintern eller våren, med upptill tre cm stora, doftlösa, vita blommor med röda och gula markeringar. Upptill 25 blommor kommer på en sex till tjugofem cm lång, upprätt eller välvd, rödaktig stjälk.

!Skötsel
Växtplatsen bör ha sval eller intermediär temperatur. Arten kan klara temperaturer över 38 grader, ner till nästan nollgradigt. Huvudsaken är att rötterna är skyddade och luften är i konstant rörelse.
Tillhandahålla gott om ljus utan direkt solsken, hög luftfuktighet och bra luftcirkulation.
Odla växten i en grov barkmix och grovt grus eller Leca. Bra dränering är ett absolut måste.
Vattna på eftermiddagen under sommaren, inte under de varmaste timmarna på dagen. På vintern bör de vattnas på förmiddagen så de hinner torka upp till kvällen. Vattna inte för ofta under vintern, övervattning bör undvikas till varje pris. Vattna inte heller under mycket kalla förhållanden. Även om växten klarar kyla, klarar den inte frost eller is kring rötterna. De har ingen viloperiod, men de stannar av under hösten och vintern. En regelbunden gödning gynnar också växten.

!Synonymer
__Homotypic Synonyms:__
//Thrixspermum hartmannii// Muell (1877)
__Heterotypic Synonyms:__
//Sarcochilus rubicentrum// Fitzgerald (1880)
//Thrixspermum rubrocinctum// Fitzgerald (1887)

!Rekommenderad läsning
[[Australasian Native Orchid Society|http://www.anos.org.au/information/articles/species/sarcochilus.htm#Sarcochilus%20hartmannii]]






































































!Allmänt och utbredning
Den växer epifytiskt som en miniatyrart mellan 750 och 3500 meters höjd på buskvegetation i Colombia, Ecuador och Peru. Den tillhör en av de vanligaste släktena i Anderna.
Artepitetet kommer från grekiskans ''chamae'' som betyder "krypande" och ''lepanthes'' som antyder likheten med släktet //[[Lepanthes|6e2dbc92-a005-4b5f-8aee-4b5c983e5247]]//. Namnet betyder alltså "en krypande Lepanthes", och anspelar på dess växtsätt.

!Utseende
Den bildar långa, frihängande rankor med halvcentimeterstora, ovala blad som kommer i par. Rankorna grenar sig gärna och kan bilda ganska rejäla revor under rätt växtförhållanden. Under senvintern eller våren kommer den dryga centimeterlånga blomstängeln nära spetsen av rankan och bär högst tre stycken två cm stora blommor som öppnas successivt. Vanligen har blommorna olika nyanser purpur, men i Ecuador växer en rent gul eller vit form.

!Skötsel
Den växer i intermediära temperaturer och behöver en hög luftfuktighet och bra luftcirkulation för att trivas. Ge den runt 15 men inte under elva grader vintertid och inte över 26 som varmast under sommaren.
Odla den i ljus halvskugga, ungefär mellan 5000 till 15000 lux, under vintern så ljust som möjligt.
Vattna ofta, under sommaren åtminstone en gång om dagen, den får inte torka ut.

!Synonymer
__Homotypic Synonyms:__
//Pleurothallis chamaelepanthes// Rchb.f. (1855)
//Humboltia chamaelepanthes// Kuntze (1891)
//Tubella chamaelepanthes// Archila (2000)
__Heterotypic Synonyms:__
//Lepanthes corazonis// Schlechter (1915)
//Pleurothallis microcharis// Schlechter (1921)
//Pleurothallis microcharis// var. //minor// Schlechter (1936)
//Trichosalpinx microcharis// Luer (1983)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/trichchamaelepanthes.htm]]














































































































!Allmänt och utbredning
Arten är endemisk för provinserna Sichuan och Yunnan i centrala Kina, och möjligen norra delen av Burma, där den växer epifytiskt eller litofytiskt mellan 2000 och 2500 meters höjd över havet.
Då den klarar temperaturer ner till minus 20 grader anses arten vara den härdigaste inom släktet
Den är döpt för att hedra den tyske insamlaren Limpritch som verkade i Asien under tidigt 1900-tal. Det något krystade svenska namnet är purpurjungfrusko.

!Utseende
Denna arts päronformade bulberna är betydligt mindre än hos de flesta andra inom släktet. Från toppen av bulben kommer ett eller två långsmalta blad som kan bli uppåt 30 cm långt. Basen av bladstammen sväller upp och bildar nästa års bulb. Blommorna som kommer under maj till juni liknar de hos //[[Pln. formosana|a8815740-5d13-4cd1-a090-4bce9334e4cc]]// men är mindre och med en kraftigare färg. Blomman blir maximalt åtta cm stor i mörkt rosa färger, med många röda prickar på en något ljusare läpp. Blomman kan hålla upptill fyra veckor.

!Skötsel
Den är helt härdig i åtminstone de södra delarna av Sverige men den har rapporterats växa väl så långt norrut som Dalarna, och odlas bäst med bulben nästan helt begravd i en humusrik, väldränerad sandjord uppblandad med torv och lecakulor. Täckning under vinter är ett absolut måste då den lätt skadas av för mycket fukt snarare än låga temperaturer under vintern. Lägg över en takpanna eller liknande som skydd mot regn och snö.
Om den odlas i grunda krukor eller skålar med någon väldränerade, fukthållande kompost i stil med hälften lerkross och bark, barkompost och sphagnum eller torv och perlite, kan det vara idé att placera plastkrukan med bulberna i en yttre lerkruka som hålls fuktig. Det sänker temperaturen under varma sommardagar.
Ge den en skuggig växtplats utan direkt solljus. Under tillväxten behöver den konstant vattning med svag gödning, men när bladen faller under hösten kan vattningen i stor sett helt upphöra. Regelbundna duschar räcker under vintern och gör också att knoppen lättare glider fram ur från mellan täckbladen utan att fastna.
Försök hålla temperaturen mellan fem och 24 grader sommartid. Under vintervilan behöver den en helt mörk period då temperaturen inte överstiger tio grader. Om den odlas i kruka bör den inte utsättas för lägre temperaturer än några minusgrader. Om bulberna står ljust under vilan förlorar den fukt och kommer inte blomma på våren.

!Synonymer
__Homotypic Synonyms:__
//Pleione bulbocodioides// var. //limprichtii// P.J.Cribb (1981)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleilimprichii.htm]]
[[OrkidéPrat|http://www.neovita.com/orkideer/no.cgi?gem=visaArtikel&postid=234073]]
[[Wikipedia|http://en.wikipedia.org/wiki/Pleione_limprichtii]]
[[Växtia|http://vaxtia.se/index.php/perenner/n-q/pleione-limprichtii.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Pleione_limprichtii]]

































































































































!Allmänt och utbredning
De är sval- eller varmväxande epifyter från Mexiko, Belize, Guatemala, Honduras och Costa Rica. Detta släkte skapades när de två nuvarande arterna, //[[Rl. digbyana|69b0ab2e-dbdb-415e-9040-a73495fe07ce]]// och //[[Rl. glauca|446b94dc-ea76-40b0-be73-5b53a664f700]]//, flyttades från //[[Brassavola|b098846e-ad91-4f83-b2e6-9fdbdc0cf091]]//. De skiljer sig från arterna inom det senare släktet genom sina cattleyaliknande pseudobulber och blad, och skillnader i blomstrukturen.
Namnet kommer från det grekiska namnet ''rhygchos'' för "näbb" på grund av den näbbformade mittloben av läppen och likheten med släktet //[[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]//.

!Utseende
Plantorna bildar ett krypande rhizom från vilket det kommer sex till 30 cm långa, penlikt spolformade pseudobulber som är tydligt åtskilda. I toppen av varje bulb kommer ett ensam, läderaktigt, tjockt, grågrönt blad som blir upptill 20 cm långt. Om den odlas i mycket starkt ljust får bladen en röd eller violett färgton. Under våren kommer en blomstängel som bär en ensam, tolv cm stor, doftande blomma. De doftar speciellt starkt nattetid. Blommorna är gräddvita eller ljust gröna med en trumpetformad läpp. Kanten på läppen är hos //[[Rl. glauca|446b94dc-ea76-40b0-be73-5b53a664f700]]// slät och hos //[[Rl. digbyana|69b0ab2e-dbdb-415e-9040-a73495fe07ce]]// kraftigt fransad.
Den vita färgen och doften som produceras endast på natten är typiska för blommor som pollineras av nattaktiva insekter.

!Skötsel
De är tåliga och lättodlade som växer utomordentligt under samma förhållanden som för de närbesläktade //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, men behöver ännu mer ljus och mycket gödning under tillväxten. De behöver hög luftfuktighet, men inte mycket vattning utan behöver torka ut mellan vattningarna. Vattning ungefär en gång i vecka kan vara lagom, rötterna får inte hållas ständigt fuktiga. Minska vattningen ytterligare under vintern.
De kan framgångsrikt odlas i väldränerade små krukor med medelgrov barkompost, men de frodas monterade på bark.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[Rl. glauca|446b94dc-ea76-40b0-be73-5b53a664f700]]// Schlecter (1918)

''Uttal''
rink-oh-LYE-lee-ah

''Synonymer''
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Rhyncholaelia]]
















!Allmänt och utbredning
En vacker och populär art som beskrevs 1909 och som växer i Royal Botanic Garden sedan 1914. Dess habitat sträcker sig från 1200 till 2900 meters höjd i områden runt Yunnan, Kina, där den växer på solbelysta klippor eller mosstäckta trädstammar. 
Denna art är mycket nära släkt med //[[Pln. formosana|a8815740-5d13-4cd1-a090-4bce9334e4cc]]//, //[[Pln. limprichtii|c6bb29ef-986f-4bd1-ba21-7637a7f2e666]]// och //[[Pln. aurita|47e8a93e-95fc-4109-9523-4450d01cee20]]//. Vissa anser att de senare är underarter till denna, i så fall, mycket variabla art. Man brukar dock särskilja dem, då de trots allt är utseendemässigt distinkta.

!Utseende
Den smalt koniska bulben producerar en stor, spektakulär blomma på en knappt decimeterhög blomstängel som utvecklas från basen av bulben redan innan bladen är fullt utvecklade. De ett eller två bladen blir upptill 15 cm långa.
Blomman, som kan bli drygt sju cm stor, är färgad i kraftiga nyanser av rosalila till violett, ofta med mycket intensiva, lysande färger. Läppen är vit, vanligen häftigt rödmönstrade. Den blommar sent på våren eller tidigt på sommaren.

!Skötsel
Det är en liten, svalväxande planta som inte tycker om att växa som ensam bulb. Arten är allmänt kinkig, och svår att få stora bulber på. Den behöver ordentligt med näring och ganska mycket vatten för att tillväxa ordentligt.
I sitt naturliga habitat kan temperaturen gå ner så lågt som fem minusgrader, men medeltemperaturen under sommaren håller sig runt 15 till 18 grader. Sommartid kan den gärna placeras ljust, men utan full sol som kan bränna bladen.

!Synonymer
__Homotypic Synonyms:__
//Coelogyne bulbocodioides// Franch., (1888)
__Heterotypic Synonyms:__
//Coelogyne delavay//i Rolfe (1896)
//Coelogyne henryi// Rolfe (1896)
//Coelogyne pogonioides// Rolfe (1896)
//Pleione delavayi// Rolfe (1903)
//Pleione pogonioides// Rolfe (1903)
//Pleione henryi// Schlechter (1919)
//Pleione mairei// Schlechter (1919)
//Pleione smithii// Schlechter (1924)
//Pleione communis// Gagnep. (1931)
//Pleione communis// var. //subobtusum// Gagnep. (1931)
//Pleione fargesii// Gagnep. (1931)
//Pleione ganchuenensis// Gagnep. (1931)
//Pleione rhombilabia// Hand.-Mazz. (1936)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleibulbochilioides.htm]]
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=bulbocodioides&grupp=pleione&avdelning=latinsktNamn&huvudavdelning=rad]]






















!Allmänt och utbredning
//Pinalia// innehåller <$view field="count"/> accepterade arter från nordvästra Himalaya och nordöstra Indien till Myanmar/Burma, södra Kina, Vietnam, Laos, Thailand, den malaysiska övärlden, en enda art i den delstaten Queensland i nordöstra Australien, och på flera Stillahavsöar.
De påträffas i en rad habitat från havsnivå till 3300 meters höjd, men de är särskilt vanligt förekommande mellan 600 och 3300 meter.
Släktet var tidigare sektion av //[[Eria|b5950489-409b-46a6-bc77-5bc12e5c2a4e]]//, men bröts ut till ett eget släkte separeras på basis av molekylära data och morfologiska karaktärer som att stammen består av flera noder.
<$reveal type="nomatch" state="$:/temp/state-c866ad00-42ef-4f33-bf9e-66d43a1a4c76" text="show">
<$button set="$:/temp/state-c866ad00-42ef-4f33-bf9e-66d43a1a4c76" setTo="show">visa mer info om utbredningen</$button></$reveal>
<$reveal type="match" state="$:/temp/state-c866ad00-42ef-4f33-bf9e-66d43a1a4c76" text="show">

;tempererade Asien
:östra Kina, Hainan, Tibet, Ryukyuöarna, Taiwan
;tropiska Asien
:delstaten Assam i Indien, Bangladesh, östra Himalaya, Indien, Nepal, Sri Lanka, västra Himalaya, Andamanerna och Nikobarerna, Kambodja, Laos, Myanmar/Burma, Thailand, Vietnam, malaysiska Borneo, Java, Små Sundaöarna, Malaysia , Maluku, Filippinerna, Sulawesi, Sumatra, Papua Nya Guinea, Solomon öarna.
;Australasia
:delstaten Queensland på Australien
;Pacific
:Samoa

<$button set="$:/temp/state-c866ad00-42ef-4f33-bf9e-66d43a1a4c76" setTo="hide">dölj</$button>

</$reveal>

!Utseende
Det är stora epifytiska eller litofytiska plantor som bildar tunna rötter från klungor av stora, tjocka, tillplattade pseudobulber, var och en med flera noder. Unga bulber är omslutna av tunna, bruna täckblad. Varje bulb bär från toppen eller övre halvan av bulben en till tre tunna, långsmala blad som håller flera säsonger. Från toppen eller nära toppen kommer också en relativt lång blomstängel med flera skålformade blommor som håller några dagar. Sepalerna är tätt eller glest behårade på baksidan och den laterala sepalen är sammanväxt med könspelarens fot, petalerna mindre än sepalerna. Läppen är fäst vid könspelarens fot och har längsgående åsar. Blommorna kan dofta lite fränt.

!Skötsel
Även om de inte är vanliga i odling, är släktet intressant och relativt lättodlat med samma skötsel som för //[[Eria|b5950489-409b-46a6-bc77-5bc12e5c2a4e]]//. De föredrar varma till svala odlingsförhållanden. Blommor är tät och har ett slags fräna lukten. Växter kan odlas i filtrerade ljusförhållanden. De kan antingen monteras eller odlas i krukor m,ed väldränerad kompost som bör få torka ut mellan vattningarna. De kan vattnas med svag gödning var fjortonde dag.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Podochileae
''Undertribus'': Eriinae

''Typart''
//[[Pina. spicata|d2cb613a-aa8c-4cca-b9ab-fcdfb8ed93bd]]// S.C.Chen & J.J.Wood (2009)

''Uttal''

''Synonymer''
__Heterotypic Synonyms:__
//Urostachya// Brieger (1981)
//Hymeneria// M.A.Clem. & D.L.Jones (2002)

!Rekommenderad läsning
[[Lucid Key Server|http://keys.trin.org.au/key-server/data/08090a09-0d0e-410b-860c-020705070e0e/media/Html/genera/Pinalia.htm]]
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:156185]]








!Allmänt och utbredning
Släktets <$view field="count"/> arter och naturhybrider finns representerat genom Mexiko, Central- och Sydamerika. De växer inom många omväxlande habitat från höga berg ner till havsnivå. Det finns därför en stor sortering både kall- och varmväxande arter, även om det stora flertalet kommer från kustnära låglandsområden, områden som naturligt har ett varmare klimat.
Blommornas skönhet inom cattleyasläktet har i alla tider fascinerat människor av alla klasser och åldrar. Och fram till början av detta århundrade var det, i vart fall i Europa, //Cattleya// man tänkte på när man sa orkidé.
Redan 1824 fick släktet sitt namn av Dr. John Lindley. Det tillägnades en av den tidens största orkidéodlare, William Cattley, England. Den allra första arten man fann var //[[C. labiata|b5be2637-f9b2-4e3d-91f7-778cb1d34f36]]//, en underbar rosablommande art med mörkare läpp.

!Utseende
Släktet har stora likheter, och är nära besläktat med, //[[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]//. Den största skillnaden är att //Cattleya// har fyra polliner, och //[[Laelia|904f6c2e-cab5-4900-9e46-d80172fbbf68]]// åtta.
Den vackraste delen med den mest lysande färgen är läppen, och petaler och sepaler har oftast samma färg. //Cattleya// delas in i två stora grupper: ''monofoliata'' (unifoliata eller enkelbladade) och ''bifoliata'' (tvåbladade).
Generellt bär monofoliata cattleyor färre blommor än bifoliata, men i gengälld är de större och har en utstående läpp (labellum). Inte fler än fyra blommor som håller 15 till 20 dagar, ofta doftande. Undantaget är //[[C. luteola|04a258fa-5533-49d3-8fb6-8d23abf0f7ef]]// som trots att den är monofoliat har små blommor.
//[[C. luteola|04a258fa-5533-49d3-8fb6-8d23abf0f7ef]]// hör till släktets minsta art, till både växt och blommor.
De bifoliata cattleyorna har en smal pseudobulb som kan variera i längd från ett par cm till åtskilliga dm. Vissa kan bli så långa en och en halv meter. //[[C. acklandiae|d65ffffa-45cc-4c43-93d8-cb9213516e59]]//, //[[C. amethystoglossa|a0bfe898-e40f-40bd-bf0e-c1d9fc5102d4]]//, //[[C. bicolor|73a85821-855f-4de4-aca1-e69cff2e73b1]]//, //[[C. granulosa|109ca46d-9bbb-4426-878e-29381c0f0a97]]//, //[[C. guttata|2aad0a50-ebfa-4711-be91-edafc3efadc7]]//, //[[C. tigrina|758804e5-f193-498e-999e-51da550ce4d9]]//, //[[C. schofieldiana|6a453022-577f-4805-b40f-33eac34ce0f3]]// och //[[C. porphyroglossa|5ee22d53-1c72-4e0b-92b6-30dbaf45d16f]]// hör till dessa giganter. Hos många arter kan blomstängeln bära över ett dussin blommor eller mer, som hos //[[C. amethystoglossa|a0bfe898-e40f-40bd-bf0e-c1d9fc5102d4]]// som kan få upp till 30 blommor.

!Skötsel
Som grupp fodrar cattleyorna mer värme och luftfuktighet än till exempel cymbidierna, men den extra skötsel som detta kräver betalas med råge av de spektakulära och färggranna blommorna.
Vissa cattleyor, speciellt monofoliata arter, har mycket tjocka blad med extra vattenhållande celler och ett hårt yttre vaxartat lager. Arter med dessa torkanpassningar måste få torka ut mellan vattningarna. Arter med tunna mjuka blad bör aldrig tillåtas torka ut helt.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[C. labiata|b5be2637-f9b2-4e3d-91f7-778cb1d34f36]]// Lindley (1821)

''Uttal''
KAT-lee-a

''Synonymer''
__Heterotypic Synonyms:__
//Sophronia// Lindl. (1828) nom. illeg.
//Sophronitis// Lindl. (1828)
//Maelenia// Dumort. (1834)
//Lophoglotis// Raf. (1838)
//Sophrocattleya// Rolfe (1887)
//Eunannos// Porta & Brade (1935)
//Hoffmannseggella// H.G.Jones (1968)
//Dungsia// Chiron & V.P.Castro (2002)
//Hadrocattleya// V.P.Castro & Chiron (2002)
//Hadrodungsia// V.P.Castro & Chiron (2002)
//Hadrolaelia// Chiron & V.P.Castro (2002)
//Microcattleya// V.P.Castro & Chiron (2002)
//Microlaelia// Chiron & V.P.Castro (2002)
//Cattleyella// Van den Berg & M.W.Chase (2004)
//Schluckebieria// Braem (2004) nom. superfl.
//Brasicattleya// Campacci (2006)
//Brasilaelia// Campacci (2006)
//Chironiella// Braem (2006)

!Rekommenderad läsning
[[Brazilian orchids|http://www.delfinadearaujo.com/generos/cattleya/gencat1.htm]]
[[Phils Orchid World|http://www.angelfire.com/or3/orchidsnz/catframes/cat.htm]]
[[Easy Orchids|http://www.easyorchids.co.uk/site/content/view/15/38/]]

























!Allmänt och utbredning
Det är en miniatyrlitofyt endemisk för Brasilien som växer på berg i full sol runt 2000 meters höjd, öster om Belo Horizonte i provinsen Minas Gerais. Den är nära besläktad med //[[C. crispata|95d473b8-bd0e-4d02-9c35-e6d95e65779a]]//.

!Utseende
Den får två till fyra cm stora, ovala eller koniska, pseudobulber som från toppen bär ett ensamt, tre till fem cm långt, styvt, köttigt blad. De nya bulberna kommer tätt intill de föregående vilket gör den till en kompakt planta. Under sommaren eller hösten kommer en kort blomstängel som knappt höjer sig över bladen och bär två till fyra stycken fem cm stora blommor i rosa nyanser. Läppen är mörkare än petalerna och har ett klargult svalg.

!Skötsel
Ge den en sval växtplats med en torr vintervila under ett par månader med bara en lätt dusch då och då. Under sommarens tillväxtperiod finns det en enkel regel att följa, "endast två någonsin": aldrig någonsin våt, aldrig någonsin torr. Rötterna ruttnar lätt om den är blöt för länge.
Planteras med fördel i små lerkrukor som torkar upp snabbt. Använd en oorganisk kompost som inte bryts ner, till exempel grus eller leca och lite sphagnum i botten på krukan. Den går också bra att odlas monterade på kork eller trä.

!Synonymer
__Homotypic Synonyms:__
//Bletia longipes// Rchb.f. (1863)
//Laelia longipes// Cogn. (1896)
//Sophronitis longipes// Van den Berg & M.W.Chase (2000)
//Hoffmannseggella longipes// V.P.Castro & Chiron (2002)
__Heterotypic Synonyms:__
//Laelia lucasiana// Rolfe (1893)
//Laelia longipes// var. //lucasiana// Schlechter (1917)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/llongipes.htm]]
[[Cattleya Orchid Source|http://cattleyaorchidsource.blogspot.se/2010/02/laelia-longipes.html]]



























!Allmänt och utbredning
//Drya. zebrina// är en epifytisk miniatyrart från Brasilien, Peru och Bolivia som växer i täta, fuktiga skogar mellan 1500 och 3400 meters höjd.
Namnet kommer från latinets ''zebrinus'' som betyder "zebralik" efter den randiga dorsala sepalen.

!Utseende
De saknar pseudobulber utan växer som täta ruggar med köttiga, styva mörkgröna blad direkt från ett underjordiskt rhizom. Bladstammens bas är omsluten av korta täckblad och avslutas med ett spetsigt utdraget ovalt blad. Hela bladen blir sällan över sex cm stora. Under perioden från våren till hösten kommer centimeterkorta blomstänglar som bär en ensam, hållbar blomma, en till en och en halv cm stor. Blommorna är mer eller mindre trekantiga med en gul grundfärg och många röda markeringar på sepaler och petaler. Sepalerna är utdragna med en lång svans. Läppen är nästan helt täckt av de röda markeringarna.

!Skötsel
I sitt naturliga habitat fuktas den dagligen av kraftiga dimmor och dagg under sommaren. Från höst till vår är det betydligt torrare.
Ge den en sval, skuggig växtplats med hög luftfuktighet och vattna ofta sommartid, tre till fem gånger i veckan, låt den inte torka ut. Odla den under 6000 till 16000 lux i en väldränerad komposmix, gärna med mycket kokosfibrer.
Försök ge den en nattemperatur mellan tolv till 15 grader, och under dagen upptill 25 grader.

!Synonymer
__Homotypic Synonyms:__
//Masdevallia zebrina// Porsch (1905)
__Heterotypic Synonyms:__
Masdevallia carinata Cogn. (1906 publ. 1907)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dryzebrina.htm]] 2015-08-06




!Allmänt och utbredning
Det är ett stort släkte med <$view field="count"/> arter, spridda både i de tempererade och tropiska områdena av världen. Den största koncentrationen finns i de tropiska områdena av Asien och Oceanien. De flesta i släktet växer terrestriskt i fuktiga bergsskogar från havsnivå till 3000 meters höjd.
Namnet kommer från det grekiska ordet ''liparos'' som betyder "fett" efter det glänsande, feta lagret på deras blad.

!Utseende
De har pseudobulber med två blad, och blommor med sepaler och petaler fria. Petalerna är smalare än sepalerna, läppen saknar sporre och två polliner. Blomstänglarna kommer alltid från den nya tillväxten, och pseudobulben fortsätter att växer sig större långt efter att blommorna vissnat.

!Skötsel
Med sådan variation är det svårt att ge några generella odlingsråd. De flesta arterna vill ha en skuggig växtplats med en temperatur som svalast 15 grader och inte varmare än 30 grader. Håll plantan fuktig, och låt den bara torka upp lätt mellan vattningarna.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Malaxideae
''Undertribus'': N/A

''Typart''
//[[Lip. loeselii|87dc11d2-2b70-428e-b649-40fa7f50edf4]]// Richard (1817)

''Uttal''
LIP-a-riss

''Synonymer''
__Heterotypic Synonyms:__
//Leptorkis// Thouars (1809)
 //Pseudorchis// Gray (1821)
//Empusa// Lindley (1824)
//Anistylis// Rafinesque (1825)
//Sturmia// L.Reichenbach (1826)
//Paliris// Dumortier (1827)
//Platystylis// Lindley (1830)
//Diteilis// Rafinesque (1833)
//Mesoptera// Rafinesque (1833) nom. rej.
//Dituilis// Rafinesque (1838)
//Iebine// Rafinesque (1838)
//Alipsa// Hoffmannsegg (1842)
//Apation// Blume (1886) nom. inval.
//Cestichis// Thouars (1887)
//Platystyliparis// Marg. (2006)

!Rekommenderad läsning
[[Australasian Native Orchid Society|http://www.anos.org.au/information/articles/species/liparis.html]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Liparis]] 2015-01-10











































































!Allmänt och utbredning
Orkidésläktet //Dracula// innehåller <$view field="count"/> accepterade arter men nya arter upptäcks fortfarande nästan varje år. De flesta arterna växer epifytiskt eller terrestriskt på skuggiga platser med jämn, svala temperatur från sydöstra Mexiko i Centralamerika och norrut, längs nordvästra Anderna, ner till Peru.
Namnet härstammar inte alls från Bram Strokers Dracula, utan betyder "liten drake" som kommer av de två karaktäristiska långa sporrarna på sepalerna. Släktet har de mest bizzara och lättigenkännerliga blommorna inom undertribus Pleurothallidinae. De tillhörde tidigare släktet //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]//, men flyttades till ett eget släkte av taxonomen Carlyle A. Luer 1978.
<$reveal type="nomatch" state="$:/temp/state-c9a159cd-ba86-431c-9ebf-f3c6ded5e682" text="show">
<$button set="$:/temp/state-c9a159cd-ba86-431c-9ebf-f3c6ded5e682" setTo="show">visa mer info om undersläktena</$button></$reveal>
<$reveal type="match" state="$:/temp/state-c9a159cd-ba86-431c-9ebf-f3c6ded5e682" text="show">

;@@font-weight:normal;undersläkte@@ Dracula 
:sektion ''Andreettaea''
:::://[[Dracula andreettae|8dec686f-eb76-48ef-a585-f767a375ab3f]]//
:sektion ''Chestertonia''
:::://[[Dracula chestertonii|63a0c38e-50ec-40cc-b659-76f28c4784c5]]//
:::://[[Dracula cutis-bufonis|f94c2442-990f-4d86-8fdf-04b9a7e3d32c]]//
:sektion ''Cochliopsida''
:::://[[Dracula cochliops|8321f490-ac2b-462e-a5f7-3f8bc16ab8e1]]//
:sektion ''Dodsonia''
:::://[[Dracula dodsonii|60c3b34b-82d1-419a-963e-b83393a7b1d0]]//
:::://[[Dracula insolita|b421ffe1-db62-40a7-a804-7bd1125c86b3]]//
:::://[[Dracula iricolor|2ec0a0b3-9e37-463d-b321-4412032a92d4]]//
:::://[[Dracula portillae|78a5bba9-a37a-400d-9590-e723376aecf3]]//
:sektion ''Dracula'' största sektionen
::undersektion ''Costatae''
::undersektion ''Dracula''
:::serie ''Dracula''
:::serie ''Grandiflorae-Parvilabiatae''
:::serie ''Parviflorae''
;@@font-weight:normal;undersläkte@@ Sodiroa
::::://[[Dracula sodiroi|d6bbd399-2536-44e8-9df4-34bbf6645e2e]]//
;@@font-weight:normal;undersläkte@@ Xenosia
::::://[[Dracula xenos|cd429a67-72a7-4762-9ce5-eab169e9bd9c]]//
se också [[Dracula-Species|http://www.dracula-species.eu/systemlist.html]]

<$button set="$:/temp/state-c9a159cd-ba86-431c-9ebf-f3c6ded5e682" setTo="hide">dölj</$button>

</$reveal>

!Utseende
Plantorna saknar pseudobulber och växer i täta bestånd, med stammarna tätt tillsammans. Varje stam bär ett enda, stort blad, som liksom arterna inom //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]// har en tydlig mittnerv och en kort spets. Bladen kan vara tjockt svampaktiga för att kompensera för avsaknaden av pseudobulber.
Blommorna, som kommer ensamma eller successivt längst ut på en ganska lång stängel, är mer eller mindre trekantiga med upptill 30 cm långa, spetsigt utdragna sporrar på sepalerna. Sepalerna är ofta tätt täckta med fint hår eller vårtor. Läppen är ganska stor för en Pleurothallid och kan liknas med en svamp. Den köttiga delen av läppen (hypochile) är delad, och den avslutande delen (epichile) är rundad och konkav. De har en välutvecklad könspelare med två polliner. Två mycket små petaler flankerar kolumnen med, ofta mörka, klumpar i spetsen, som ögon på draken! Färgerna går genom flera nyanser av gult, rosa, blodrött till mörkt rödbrunt, nästan svart. Ofta är de tecknade i flera av dess färger med prickar eller linjer.
Hos de allra flesta arterna växer stängeln nedåt, genom komposten och ut på undersidan av korgen. Ett antal arter har horizontala stänglar och ytterligare ett litet fåtal har helt upprätta stänglar. Blommorna kommer enstaka eller öppnas successivt. Å;tminstone de tre arterna //[[Drac. sodiroi|d6bbd399-2536-44e8-9df4-34bbf6645e2e]]//, //[[Drac. decussata|81990aaa-71a1-4f83-90fa-83b630f4b395]]// och //[[Drac. papillosa|9572b363-5369-4ab6-8f4a-ad78bb233aab]]// kan ha upptill tre samtidiga blommor utslagna på en och samma stängel. Generellt om det är mer än en blomma på en stängel öppnas de med långt mellanrum.

!Skötsel
Arterna inom draculasläktet frodas i de flesta fall på växtplatser som är svala och skuggiga, och avskyr, precis som sin namne, direkt solljus. De behöver en växtplats med en hög luftfuktighet och god luftcirkulation. De odlas med fördel i korgar som tillåter att den hängande blomstängeln utvecklas ordentligt. Detta släkte klarar nästan hur mycket vattning som helst, vissa arter till och med stående i krukor med vatten så länge det är bra vattenkvalitet. De behöver inte mycket gödning, och bladspetsarna blir snabbt svarta om de får för mycket. De är mycket känsliga för kemikalier eller uppbyggnad av salter i komposten.
Svep in plantan i levande sphagnum och fyll upp korgen med medelgrov barkkompost. Det tillåter att barken torkar upp trots att mossan hela tiden hålls fuktig. Omplanteringen görs med fördel på hösten eller tidig vår innan sommarens värme kommer.
För att blommorna ska hålla sig krävs hög luftfuktighet, annars vissnar de innan de ens hunnit slå ut. Temperaturen bör ligga mellan 13 grader på natten och upp till 23 på dagen och aldrig tillåtas gå över 26 grader, i sådant fall kommer rötter och knoppar snabbt att torka ut. Kommersiella odlare odlar dem med framgång i växthusens skuggigare och svalare del tillsammans med //[[Oncidium|5a76ad4a-3ab1-4598-9136-06ea23af913a]]//, //[[Masdevallia|de0c5d53-685b-4e01-803f-f2ae253abd48]]// och //[[Miltoniopsis|4cb00e77-e639-45a9-85f2-8102538aad1d]]//.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Drac. chimaera|aabfe06f-1fde-45f5-9225-7afbb31fd807]]// Luer (1978)

''Uttal''
DRAK-yew-lah

''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Dracula_(biology)]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dracula]]
[[Dracula-Species|http://www.dracula-species.eu/]]
[[Dracula by Eileen Watson|http://freespace.virgin.net/eileenrobin.watson/]]
[[Peripatus|http://www.peripatus.gen.nz/Taxa/Spermatophyta/Dracula.html]]
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/dracula.htm]]
[[the Culture Sheet|http://culturesheet.org/orchidaceae:dracula]]
[[American Orchid Society|http://www.aosforum.org/pdf/Dracula_culture.pdf]] pdf
































































!Allmänt och utbredning
//Paph. mastersianum//	[paf-ee-oh-PED-i-lum mas-terz-ee-AH-num] finns endast på de tre öar Seram, Buru och Ambon i ögrupperna Små Sundaöarna och Moluckerna i Indonesien där den växer terrestriskt mellan 910 och 1800 meters höjd.
Det finns två accepterade varianter, //Paph. mastersianum// var. //mastersianum// och //Paph. mastersianum// var. //mohrianum// Koop. (2000).
Arten är uppkallad efter Maxwell T. Masters, redaktören för den välkända tidskriften Gardener's Chronicle under 1800-talet. Taxonomiskt tillhör den undersläktet Sigmatopetalum sektionen Blepharopetalum. Kromosomtalet är 2n=36.

!Utseende
Den bildar fyra till sex tunna, mörkgröna blad, ibland med svag marmorering beroende på hur ljust plantan står. Bladen blir blekare då ljuset är starkare. Bladen blir upptill 30 cm långa och tre till fem cm breda blad. Under januari till mars kommer en 30 till 40 cm lång blomstängel som bär en ensam blomma. Den dorsala sepalen är äppelgrön med mörkare gröna nerver och en vit kant. Petalerna är mörkt chokladbrun till brunlila och läppen är orangeröd med skiftningar i ljusrosa.

!Skötsel
Området där de växer utsätts för kraftiga regn under sommaren och bara enstaka regn under vintern med dimma och kondens som ger fukt under torrperioden.
Ge plantan måttligt ljus till halvskugga med intermediär till varma temperaturer som inte sjunker under 18 grader nattetid. De tunna bladen är känsliga för om luftfuktigheten sjunker för lågt, håll den över 60%. Plantera i en svagt sur, väldränerad kompost med medelgrov bark och perlit. Den är känslig för uppbyggnad av salter i komposten så skölj regelbundet igenom komposten med rent vatten. För att inducera blomningen behövs en period med minska vattning under vintern.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium mastersianum// Rchb.f. (1879)
//Cordula mastersiana// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphmastersianum.htm]] 2015-05-27
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/mastersianum/index.html]] 2015-05-27
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_mastersianum]] 2015-05-27
!Allmänt och utbredning
//Epidendrum// är ett enormt släkte. Man brukar räkna med att det finns kanske 25000 till 35000 orkidéarter i världen, av dessa tillhör <$view field="count"/> epidendrumsläktet.
När Linné skapade släktet 1753 i sin ''Species Plantarum'' stoppade han in alla kända epifytiska orkidéer i det, total 42 stycken. Sedan dess har släktet genomgått flera revisioner och är numera uppdelat på 50 undergrupper och släkten såsom //[[Dimerandra|7ff5e507-299f-4d61-857d-8d53d04c412b]]// och //[[Encyclia|bd328114-eef7-4bb0-988a-95e172e6ffb0]]// har skapats av arter som tidigare tillhört //Epidendrum//. Ofta är det skillnader i könspelarens utseende som har placerat dem i olika släkten.
Naturligt finner man släktets medlemmar från Florida ända ner till tropiska Argentina, och från havsnivå upp till höglandsområden. Denna utspridning har skapat stora variationer inom släktet. Exempelvis varierar plantornas uppbyggnad från att ha tunna höga stammar till äggliknande pseudobulber.
Namnet //Epidendrum// kommer av grekiskans ''epi'', "på", och ''dendron'', "träd". Dock växer många av arterna som litofyter eller i tjock mossa.

!Utseende
Bladen är allt från någon centimeter till många decimeter stora. Karakteristiskt för släktet är att könspelaren i blommans centrum är tvådelad i framkanten. Många av arterna har även läppen delvis fäst mot könspelaren. Dessa två bildar då tillsammans en rörlikande nektargömma. Blommorna saknar därför ofta sporre.

!Skötsel
Liksom att växtsättet varierar, varierar även odlingen, men många av arterna är enkla att odla. Placering bör ske i öst- eller västfönster, utan allt för starkt direkt solljus. Ge plantorna medeltemperatur och vatten när komposten börjar torka. Ingen speciell viloperiod behövs, utan jämn vattning passar bra.
Komposten kan förslagsvis vara en mycket lövrik. De små krypande arterna i släktet odlas bäst i en låg kruka eller monterade på bark eller kork. Bulbförsedda arter bör odlas i väldränerade krukor i vilken komposten kan torka ut när bulberna mognat. De högstammiga arterna kan odlas i kruka.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Laeliinae

''Typart''
//[[Epi. nocturnum|4a106d12-d34b-4df0-9203-60a105fcd71a]]// Jacq. (1763)

''Uttal''
eh-pi-DEN-drum

''Synonymer''
__Heterotypic Synonyms:__
//Phadrosanthus// Neck. (1790) opus utique oppr.
//Amphiglottis// Salisb. (1812)
//Auliza// Salisb. (1812)
//Stenoglossum// Kunth (1816)
//Larnandra// Raf. (1825)
//Nanodes// Lindl. (1832)
//Diothonea// Lindl. (1834)
//Exophya// Raf. (1837)
//Nyctosma// Raf. (1837)
//Tritelandra// Raf. (1837)
//Amblostoma// Scheidw. (1838)
//Coilostylis// Raf. (1838)
//Didothion// Raf. (1838)
//Physinga// Lindl. (1838)
//Seraphyta// Fisch. & C.A.Mey. (1840)
//Anocheile// Hoffmanns (1841)
//Gastropodium// Lindl. (1845)
//Oerstedella// Rchb.f. (1852)
//Pseudepidendrum// Rchb.f. (1852)
//Hemiscleria// Lindl. (1853)
//Lanium// Benth. (1881)
//Pleuranthium// Benth. (1881)
//Psilanthemum// Stein (1892)
//Spathium// Stein (1892) pro syn.
//Neolehmannia// Kraenzl. (1899)
//Spathiger// Small (1913)
//Epidanthu//s L.O.Williams (1940)
//Epidendropsis// Garay & Dunst. (1976)
//Kalopternix// Garay & Dunst. (1976)
//Minicolumna// Brieger (1976) nom. inval.
//Neowilliamsia// Garay (1977)
//Takulumena// Szlach. (2006)

!Rekommenderad läsning
[[Yamada"s Orchid Nursery|http://www.yamadanursery.com/epi__care.htm]]
[[the Orchid Mall|http://www.orchidmall.com/general/epi_art.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Epidendrum]] & [[lista|http://en.wikipedia.org/wiki/List_of_Epidendrum_species]] över arterna
[[Neovita|http://www.neovita.com/orkideer/no.cgi?artikel=grund&grupp=epidendrum&avdelning=latinsktNamn&huvudavdelning=rad]]

















































!Allmänt och utbredning
//Coel. flaccida// stammar från Nepal, norra Indien, Myanmar, Laos och södra Kina. Den växer i regnskogar upptill 2000 meters höjd.

!Utseende
Arten får mörkgröna, ovala pseudobulber, med två tunna, lansettlika blad. Under vintern och våren producerar den 25 cm långa, hängande blomstänglar med doftande blommor fyra till fem cm i diameter. Sepaler och petaler hos blommorna är vita. Läppen är vit, fläckad svagt gul långs kanten, och med ränder i mörkrött mot basen. Blommorna doftar men inte helt angenämt.

!Skötsel
För en lyckad blomning av //[[Coel. cristata|5b87f6d8-ad59-4ff6-9544-80ef79a6f7d6]]// och //Coel. flaccida// behöver plantorna en kall period, speciellt under vintern, då temperaturen bör gå ner till minst 10 grader under nätterna. Den trivs utomhus i friska luften från våren till sena hösten. Men undvik direkt sol, bladen bränns lätt.
Vattna ordentligt under sommaren. På hösten, före blomningen, reduceras vattningen. Efter blomningen, under viloperioden, kan den hållas helt torr och klarar sig med att bara bli duschad med jämna mellanrum.
De föredrar att växa monterade på bark eller i en korg, så att blomstänglarna kan hänga fritt. Som kompost i kruka eller korg kan man använda lika delar sphagnum och torv, med en liten tillsats sand. Använd, kasserad, phalanopsiskompost är också utmärkt. Omplanteringen bör ske efter det att blomningen är över.

!Synonymer
__Homotypic Synonyms:__
//Pleione flaccida// Kuntze (1891)
__Heterotypic Synonyms__
//Coelogyne esquirolii// Schlechter (1919)
//Coelogyne flaccida// var. //longiracemosa// Roeth (2006)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coelflaccida.htm]]
[[OrchidsOnline|http://www.orchidsonline.com.au/species1397.html]]







































































































































































!Allmänt och utbredning
Arten växer i östra Brasiliens öppna, fuktiga bergsskogarna längs vattendrag mellan 600 och 1300 meters höjd, från delstaten Bahia i öster vid Atlantens kust till delstaten Rio Grande do Sul längst i söder.
Den är uppkallad efter den brasilianska [[prinsessan Isabel de Alc Antara|http://en.wikipedia.org/wiki/Isabel,_Princess_Imperial_of_Brazil]], senare hertiginna av d´Eu, och beskyddare av forskarna och trädgårdsodlare i Brasilien under det nittonde århundradet.

!Utseende
Det är en liten krypande epifyt, eller i undantagsfall, litofyt, som trots att det är den största arten inom //[[Isabelia|9fa67dbe-edfd-4106-9bb7-581ec4450a18]]// sällan blir mer än fem cm hög. Den har tätt växande, upprätta pseudobulber i ärtformat, både till form och storlek, med en eller två långsmala blad i toppen. Vanligen blommar de under höst eller vinter med en eller två stycken förhållandevis stora blommor för en sådan liten planta. Det är den enda arten inom släktet som kan producera mer än en blomma per stängel. Blommorna är två cm stora, i mörkt rosa eller purpur, med fri könspelare och åtta pollinier. För ett sådant stort utbredningsområde har arten en väldigt liten variation i utseende mellan plantor eller populationer, men några få alba former har hittats sedan upptäckten 1840. 

!Skötsel
De föredrar en ljus växtplats utan direkt sol med svala eller intermediära temperaturer och god luftcirkulation. I sitt naturliga habitat får de en kraftig temperatursänkning och medföljande dimma nattetid. Vanligtvis odlas de monterade på kork, men en blandning av barkkompost och sphagnum fungerar också bra. Håll komposten fuktig och låt den bara torka ut lätt mellan vattningarna.

!Synonymer
__Homotypic Synonyms:__
//Sophronitis violacea// Lindl. (1840)
//Sophronia violacea// Kuntze (1891)
//Sophronitella violacea// Schlechter (1925)
__Heterotypic Synonyms:__
//Sophronitis violacea// var. //alba// Barb.Rodr. (1882)
//Isabelia violacea// f. //alba// F.Barros (2003)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Isabelia_violacea]]
[[Miranda Orchids|http://mirandaorchids.com/species31violaceaVGA.htm]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/sophviolacea.htm]]
!Allmänt och utbredning
Arten är endemisk för den näst största ön Mindanao i Filippinerna där den växer terrestriskt i lövkompost bland klipporna i fuktiga regnskogar mellan 1250 och 1350 meters höjd. Den växer i fragmenterade habitat som inte är skyddade och utsätts ständigt för kraftig mänsklig påverkan som storskalig skogshuggning, svedjebruk och utbyggnad av bostadsområden. Arten är översamlad i naturen och efterfrågan på den lokala och internationella marknaden har gjort att den numera är sällsynt och av IUCN kategoriserad som akut hotad.
Namnet kommer efter formen på staminoiden som är starkt aducerad, det vill säga böjd bakåt i en skarp vinkel, i motsats till den trubbiga vinkeln hos [[Paph. rothschildianum|edfdc74c-5e39-4321-97a3-be9ef4cc4c68]]. Kromosomtalet är 2n=26.

!Utseende
Det är en liten kompakt planta med sex smala, avlånga, drygt 26 cm långa och fyra cm breda, mörkgröna blad. Längs kanterna är bladen ljusare gröna. Under vintern kommer en upptill 30 cm lång, upprätt eller böjd, behårad blomstängel som bär två eller tre blommor som öppnas samtidigt. Blommorna blir mer än tio cm stor med långa, smala sepaler och petaler. Sepaler är ljus gulgröna eller vita med ränder i mörkt purpur. Petaler och läpp är ljusgula med prickar i purpur. Staminoiden är rektangulär, ljust gul med hår som kantar sidorna.

!Skötsel
De växer varmt och jämnt fuktiga. Plantorna utsätts i naturen för kraftiga regn under sommaren till vintern. Våren är torrare men luftfuktigheten hålls konstant hög.
Plantorna bör odlas i områden med måttligt starkt ljus och jämna, intermediära temperaturer, med nattemperaturer mellan 16 och 20 grader. Vintertid kan de stå något svalare men inte under 12 grader på nätterna. Plantera i en väldränerad mix av medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag med vatten av god kvalité, R/O eller regnvatten. För att inducera blomning bör vattningen minskas och temperaturen sänkas i början av våren när de nya rötterna börjar bildas.
Den är inte svårodlad men tillväxer riktigt långsamt om förhållanden inte är helt optimala.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum anitum// Golamco (1998)
//Paphiopedilum adductum// var. //anitum// Koop. (2000)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphadductum.htm]] 2015-01-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_adductum]] 2015-01-28
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/adductum/index.html]] 2015-01-28
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:146973]] 2015-01-28















!Allmänt och utbredning
Det är en kompakt miniatyrart som växer epifytiskt i Ecuadors molnskogar mellan 500 och 1650 meters höjd.
Artepitetet kommer från det latinska orden ''niveao'' som betyder "vit" och ''globula'' som betyder "sfärisk" eller "rund" och anspelar på den små, runda, vita blommorna.

!Utseende
De saknar pseudobulber utan de styva, hjärtformade bladen kommer på långa bladstjälkar från en underjordisk stam. Blommorna kommer en och en på en kort blomstängel på ovansidan av bladskivan, från basen av bladet där bladstjälken och bladet sammansmälter. De hållbara blommorna som vanligen kommer från våren till hösten, är små och runda, bara några mm stora, och helt snövita.

!Skötsel
Ge den en ljus skugga utan direkt sol, 5000 till 15000 lux. Håll temperaturen över elva grader och under 26 så kommer plantan frodas. Den kan med fördel odlas monterad men det går även bra i krukor med en fuktighetshållande, porös kompostmix med mycket sphagnum. Håll komposten ständigt fuktig.

!Synonymer
__Homotypic Synonyms:__
//Ancipitia niveoglobula// Luer (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleurniveoglobulba.htm]]

!Allmänt och utbredning
Den växer terrestriskt i mossa eller lövhumus i sprickor på utsatta kalkstensklippor på nordvästra Nya Guinea och närbelägna öar från havsnivå upp till 200 meters höjd.
Namnet kommer från latinets ''praesto'' som betyder "utomordentlig". Den kan misstas för //[[Paph. wilhelminiae|a796361b-f920-4212-a71a-dcaa27ca8cc7]]// men //Paph. praestans// är större och får fler, större och gulare blommor. //[[Paph. wilhelminiae|a796361b-f920-4212-a71a-dcaa27ca8cc7]]// växer också högre upp i bergskedjan på det centrala Nya Guienea, inte vid havsnivån längs kusterna som //Paph. praestans//. Taxonomiskt tillhör den undersläkte Polyantha sektion Mastigopetalum.

!Utseende
Det är en liten eller medelstor art som bildar små bestånd med många skott tätt tillsammans. Varje planta bildar fyra till sex mörkgröna, avlånga blad upptill 40 cm långa och tre till sex cm breda. I mitten av bladen finns ett tydligt veck längs hela bladet längd. Vår och höst kommer en 30 till 50 cm lång blomstängel, blå-grön-brun, tätt beströdd med korta, tunna hår. Varje stängel bär två till fem blommor. Blommorna blir tolv till 15 cm breda, med vridna petaler randiga i grön-brunt och som vid basen är översållad med små, svarta vårtor. Petalerna är aldrig lila eller purpur. Framsidan av de stora iögonfallande sepalerna är randiga i rödbrunt på en vit och ljusgul bakgrund. Baksidan av sepalerna har tydligt gröna ränder.

!Skötsel
Ge den en ljus växtplats utan direkt sol. Under sommaren går temperaturen upp till 30 grader och ner till 18 under nätterna. Vintertid ligger temperaturen drygt fem grader lägre. Arten föredrar ofta en väldränerad kompost som snabbt torkar upp efter vattningen. Kompostmixen får också gärna innehålla en andel kalk.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium praestans// Rchb.f. (1886)
//Cordula praestans// Rolfe (1912)
//Paphiopedilum glanduliferum// var. //praestans// Braem (1988)
__Heterotypic Synonyms:__
//Cypripedium gardineri// Guillemard (1886)
//Paphiopedilum gardineri// Pfitzer (1894)
//Paphiopedilum glanduliferum// var. //gardineri// Braem (1988) nom. inval.
//Paphiopedilum striatum// M.A.Clem. & D.L.Jones (1996)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphpraestans.htm]] 2015-08-10
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/praestans/index.html]] 2015-08-10
[[Papua New Guinea Orchid News|http://www.orchidspng.com/contrib_garay2.html]] 2015-0810
[[Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-praestans.html]] 2015-08-10




























!Allmänt och utbredning
Denna framförallt epifytiska art förekommer lågt ner på trädstammar eller på fuktigt, ruttnande trä i de ständigtgröna låglandsskogarna i provinsen Assam i Indien, östra Himalaya, Sikkim, Thailand, Kambodia, provinserna Taiwan, Fujian, Guangdong, Guangxi, Hainan och Yunnan i Kina, Vietnam, Sabha på den västra delen av den malaysiska ön Borneo, ön Luzon i Philippinerna, Sulawesi, öarna Sumatra och Celebes i Indonesien, Taiwan, Ryukyu Islands och Japan mellan 300 och 1800 meters höjd. Den har även påträffats litofytiskt.

!Utseende
Den har en liten pseudobulb gömd längst ner vid basen av de fem till åtta bladen som sprider ut sig i en solfjädersform i ett plan. De gräsliknande bladen blir en cm breda och 30 till 50 cm långa. Från bulben kommer under sommar eller höst en två dm lång, hängande blomstängeln som vanligen bär fem till tio blommor men ibland dussintals. Blommorna är cirka fem cm i diameter och färgade i ljusa nyanser av grönt och brunt med en klarröd rand längs mitten av läppen.

!Skötsel
Plantorna bör odlas i svala till varma miljöer, ljust eller i ljus skugga. Under vintern bör temperaturen inte gå under fem grader. 
De föredrar att torka ut lätt mellan vattningarna. De mår inte bra av för mycket vatten, bladen tenderar att bli kortare om rötterna hålls för våta, komposten ska vara fuktig men inte blöt. Under vintervilan kan vattningen reduceras ytterligare. Ungefär en gång i veckan kan vara lagom vattningsfrekvens.
Plantera i barkkompost och perlite med rikligt andel sphagnum. Eller ungefär halva krukan med leca och resten sphagnum.

!Synonymer
__Homotypic Synonyms:__
//Cymbidium eburneum// var. //dayanum// Hook.f. (1891)
__Heterotypic Synonyms:__
//Cymbidium eburneum// var. //dayi// Jennings (1875)
//Cymbidium leachianum// Rchb.f. (1878)
//Cymbidium pulcherrimum// Sander (1891)
//Cymbidium simonsianum// King & Pantl. (1895)
//Cymbidium acutum// Ridl. (1896)
//Cymbidium alborubens// Makino (1902)
//Cymbidium simonsianum// f. //vernale// Makino (1912)
//Cymbidium angustifolium// Ames & C.Schweinf. (1920)
//Cymbidium sutepense// Rolfe (1925)
//Cymbidium poilanei// Gagnep. (1931)
//Cymbidium dayanum// var. //austrojaponicum// Tuyama (1941)
//Cymbidium eburneum// var. //austrojaponicum// M.Hiroe (1971)
//Cymbidium dayanum// subsp. //leachianum// S.S.Ying (1989)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cymdayanum.htm]]
[[Developing an Orchid Collection with Backbulbs|http://blog.backbulb.com/2010/03/cymbidium-dayanum.html]]
[[Japanese Orchids|http://homepage3.nifty.com/plantsandjapan/page097.html]]
[[Cymbidium Speices|http://www.cymspecies.com/dayanum.htm]]



















































































https://ecomingafoundation.wordpress.com/tag/quechua/



























































































































































!Allmänt och utbredning
//Cattleya coccinea//, uttalas [kok-SIN-ee-uh], också är välkänd under sitt gamla namn //Sophronitis coccinea//, är en miniatyrart som växer på kustnära bergskammar parallellt med kusten från delstaten Santa Catarina norrut genom delstaterna Paraná, São Paulo och Rio de Janeiro i sydöstra Brazilien. Efter ett kort avbrott, återfinns de längre österut i Organ Mountains och sedan norrut i de kustnära bergen Serra do Mar i Espirito Santo och vidare till provinsen Misiones i Argentina. Inom denna region kan livsmiljön vara fragmenterad med många kilometer mellan växtplatserna, men de återfinns nästan alltid inom en halv mil från, och på sluttningar vända mot, havet på 610 till 1810 meters höjd. De fuktiga, sydöstliga passadvindarna i denna region lyfts uppför de kustnära bergen och kondenseras till moln och dimma med fina, dagliga duggregn. Detta inträffar nästan varje eftermiddag och fortsätter under natten, även under den torra årstiden. På grund av detta är växtmiljön mycket fuktig med mossa som täcker allt. De genomsnittliga träden i dessa fuktiga skogarna är fem till 15 meter höga och tio till 30 cm i diameter. //Cattleya coccinea// växer på dessa mosstäckta klippor och förkrympta småträd från nära marken nästan ända till toppen.
En gång var den vanlig i odling, men med de nya, mer lättodlade hybriderna som arten givit upphov till, har intresset minskat. Många av de plantor som finns på marknaden är illegalt insamlade från sina naturliga livsmiljöer. De börjar bli sällsynta inte bara i odling, utan också i naturen.
Artepitetet betyder "scharlakansröd" efter blomman intensiva färg.

!Utseende
Det är en liten planta med ett kompakt växtsätt med små, tätt hopträngda, spolformade pseudobulber som bär ett enda, elliptiskt blad som blir uppåt sex cm långt. Under våren vid odling och under hösten och vintern i Brazilien, kommer en kort blomstängel som bär en ensam, intensivt rödorange blomma med runda petaler och en vackert gulmönstrad läpp. Det finns även en alba variant där den gula färgen överväger. Den doftlösa blomman blir tre till sju cm stor och varar i två månader.

!Skötsel
Den föredrar en sval växtplats med ljus halvskugga, hög luftfuktighet och god luftcirkulation. I sitt naturliga habitat går sommartemperaturen sällan över 27 grader och vintertemperaturen håller sig runt sju grader men aldrig under nollgradigt.
Ge svag gödningsdos regelbundet under tillväxperioden och håll den jämnt fuktig året om. Ge den vatten av bra kvalité, helst regnvatten eller R/O-vatten. 
Den kan odlas monterad, i grus eller i ren, grov perlit med stengrus ovanpå för att hålla kvar perliten vid vattning. Om den odlas i ren perlite behöver den bara vattnas en gång i veckan även om luftfuktigheten är låg. Det kan vara svårt att få den att trivas i barkkomposter som bryts ner alltför snabbt.

!Synonymer
__Homotypic Synonyms:__
//Sophronitis grandiflora// Lindley (1838)
//Cattleya grandiflora// Beer (1854)
//Sophronitis coccinea// Rchb.f. (1862)
//Sophronia coccinea// Kuntze (1891)
//Hadrolaelia coccinea// Chiron & V.P.Castro (2002)
__Heterotypic Synonyms:__
//Sophronitis militaris// Rchb.f. (1862)
//Sophronitis rossiteriana// Barb.Rodr. (1877)
//Sophronia militaris// Kuntze (1891)
//Sophronitis coccinea// f. //rossiteriana// Pabst & Dungs (1972)
//Cattleya coccinea// var. //rossiteriana// Van den Berg (2008)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/sophcoccinea.htm]]
[[Miranda Orchids|http://mirandaorchids.com/species05coccineaVGA.htm]]
[[Cattleya Source|http://cattleya.wikidot.com/sophronitis-coccinea]] eller
[[Cattleya Orchid Source|http://cattleyaorchidsource.blogspot.se/2009/12/sophronitis-coccinea.html]]































































































































































!Allmänt och utbredning
Den här miniatyrarten växer epifytiskt i låglandsskogar i Thailand, den malaysiska övärlden, Laos, Kambodja, Vietnam, Sumatra och Borneo mellan 500 och 700 meters höjd över havet.
Namnet kommer från latinets ord för "lejon-lik" och anspelar på blommans utseende.

!Utseende
Den bildar kluster med hängande, platta stammar helt täckta med överlappande, trekantiga, köttiga blad. De mattgröna bladen växer i ett plan och ger plantan ett säreget utseende. När som helst under vår till höst kan blommorna komma. Blomstänglarna är korta och kommer fram mellan bladen i toppen av stammarna. Varje blomstängel bär bara en knappt två cm stor, klargul blomma som doftar svagt av vanilj eller honung. Blommorna är snart överblommade, lite över en vecka kan de klara sig.

!Skötsel
Håll den varm och fuktig på en ljus växtplats utan direkt sol, gärna mellan 27000 och 37000 lux. Ge den varma eller intermediära temperaturer, inte lägre än 16 grader och helst inte över 32. Vattna två till fyra gånger per vecka och låt den bara torka upp lätt. Den odlas med fördel monterad på bark- eller korkplattor.

!Synonymer
__Homotypic Synonyms:__
//Aporum leonis// Lindl. (1840)
//Callista leonis// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denleonis.htm]]































































































































!Allmänt och utbredning
Det är en storväxt art från Colombia och Ecuador där den växer epifytiskt eller litofytiskt i näringsrik, vulkanisk lera på exponerade steniga sluttningar mellan 600 och 2800 meters höjd.
//Prag. warszewiczianum// har länge ansetts som en variant av //[[Phrag. caudatum|f8ba86f2-f427-4519-b797-9b85b6915e40]]// men har getts status som egen art.
Arten är uppkallad för att hedrad den polska botanisten [[Józef Warszewicz Ritter von Rawicz|https://en.wikipedia.org/wiki/J%C3%B3zef_Warszewicz]] (1812-1866).

!Utseende
Den saknar pseudobulb utan bildar en upprätt solfjäder med fem till nio långsmala blad från en kort stam. De ljusgröna bladen blir drygt 40 cm långa och tre till fem cm breda. Under vår och tidig sommar kommer en 40 till 60 cm lång blomstängel som kan bära upptill fyra samtidigt öppna blommor. Blommorna håller vanligen tre till fem veckor och har långa, hängande, gröna till gulgröna petaler som kan bli mer än en halvmeter lång och mindre än en cm breda. Sepalerna är ljusgröna med mörkare nerver och vågiga kanter. Läppen är blekt bronsfärgad.

!Skötsel
Ge den en ljus växtplats med mellan 12000 till 32000 lux med god luftcirkulation och intermediära temperaturer, ner till 14 grader nattetid och mellan 24 och 28 grader dagtid. Plantor som odlas i svagt ljus får längre blad med mörkare gröna färger. Plantor i starkare ljus har kortare, ljusgröna blad. Under sommarmånaderna kan ljusnivåer minskas när dagarna är längre och plantan kan ackumulera mer ljusenergi. För att främja vårens blomningen bör ljusnivåerna ökas till 20000 till 32000 lux en eller två månader under senvintern. 
Ge mycket vatten av god kvalité, låt den bara torka upp lätt mellan vattningarna. Under vintern kan vattningarna minskas något men utan att komposten får torka upp helt. Ge svag gödning, en fjärdedel av den rekommenderad dosen eller svagare, ungefär var tredje vattning.
Odla den i en mix av medelgrov barkkompost och perlite eller sphagnum. Plantera helst om under våren då stressen för plantan är som minst.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium warszewiczianum// Rchb.f. (1852)
//Selenipedium warszewiczianum//Rchb.f. & Warsz. (1854)
//Paphiopedilum warszewiczianum// Pfitzer (1894)
//Phragmipedium caudatum// var. //warszewiczianum// Pfitzer (1903)
__Heterotypic Synonyms:__
//Cypripedium wallisii// Rchb.f. (1873) pro syn.
//Selenipedium wallisii// Rchb.f. (1873)
//Paphiopedilum caudatum// var. //wallisii// Stein (1892)
//Cypripedium caudatum// var. //wallisii// A.H.Kent (1894)
//Paphiopedilum wallisii// Pfitzer (1894)
//Selenipedium caudatum// var. //wallisii// Rolfe (1895)
//Phragmipedium caudatum// var. //wallisii// Pfitzer (1903)
//Phragmipedium wallisii// Garay (1978)
//Phragmipedium lindenii// subsp. //wallisii// Dressler (2005)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragwallisii.htm]] 2015-10-30
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Phragmipedium-warszewiczianum&lang=en]] 2015-10-30

;Guido Jozef Braem, Sandy Öhlund, Robert-Jan Quené, 2004
://The real //Phragmipedium warszewiczianum// - A clarification of the Phragmipedium caudatum complex (Phragmipedium section Phragmipedium)//
:Orquideología  12/2004; 23(2):117-136
:http://www.researchgate.net/publication/266200737




















!Allmänt och utbredning
Det är en kall till svalväxande miniatyr epifyt från provinserna Papua och den västra delen av Irian Jaya Barat på Nya Guinea. Den växer mellan 900 och 2500 meters höjd i fuktiga och skuggiga bergsskogar. Arten bildar snabbt täta mattor.

!Utseende
Arten är mattformande med pseudobulber som blir nästan cylindriska, klubbformade och med rötterna som är tunna och trådlika. Bulberna kommer tätt ihop på rhizomet och är upptill en cm långa med två till fyra mm smala, avlånga blad som blir två cm långa. De tre till fyra köttiga bladen kommer i toppen av bulben, i ett plan som helikoptervingar. Blommorna kommer på en mycket kort blomstängel från toppen av en ny pseudobulb. Varje blomställning bär en ensam, klockformad blomma som håller länge. Blommorna kommer framförallt under vinterhalvåret. Dessa är som små exploderande bollar i orange och gult. Varje blomma är ungefär sex mm i diameter. En välodlad planta kan ha dussintals blommor över hela plantan, som droppar av färg i ett mörkgrönt hav.

!Skötsel
Eftersom den är mattbildande odlas den med fördel monterad eller i låga, vida terrakottakrukor i en blandning av medelgrov bark och perlite. Göd ofta med svag näringsdos och håll dem relativt fuktiga. Bladen är suckulenta och skrumpnar lätt om vattningen inte är tillfredsställande. Den föredrar en sval placering med mycket ljus, dock mindre ljus än cattleyor. De frodas i svala omgivningar och tillväxten upphör faktiskt nästan helt under sommaren, för att åter sätta fart på hösten under den svala delen av året.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/mediocalcdecoratum.htm]]
[[Miniatures of New Guinea|http://members.ozemail.com.au/~dsmedley/miniatures_of_new_guinea.htm]]














































































!Allmänt och utbredning
Arten växer i Vietnam nära Hué och runt Tamdao, May Bac och Mang Canh, och i Kina där den återfinns på den södra delen av ön Hainan. Den växer epifytiskt och litofytiskt i ständigt gröna låglandsskogar och höglandsmolnskogar mellan 500 och 2200 meters höjd.
Kromosomtalet är 2n=42.

!Utseende
De runda eller ovala pseudobulberna är en till en och en halv cm stora och kommer med ungefär en till tre cm mellanrum på ett välutvecklat rhizom. Bulberna är från början skyddade av tunna täckblad som senare försvinner. Från toppen av bulben kommer ett ensamt blad som kan bli upptill tio cm långt och två cm brett. Från bladfästet kommer under augusti till oktober även en upptill fyra cm lång blomstängel som bär en enda blomma. Stängeln och baksidan av sepalerna är mer eller mindre ludna, beklädda av en tät matta av bomullslika, rödbruna hår. Blomman är gul med en gulröd läpp och purpurränder. Den har också en stark, söt doft.

!Skötsel
I sitt naturliga habitat utsätts den för temperaturer mellan nära noll och upptill 30 grader men vanligen går den bara ner till tolv grader under vinternätterna och upp till drygt 20 grader under dagen. Under sommaren ligger temperaturen i snitt drygt sex grader högre, och med en genomsnittlig luftfuktighet från 70% under vintern till över 80% under resten av året.
Den trivs i ljus halvskugga utan direkt middagssol, ungefär 15000 till 23000 lux.
Under tillväxtperioden behöver den mycket vatten ofta, vattna varannan till var tredje dag. Under hösten minskas vattningen gradvis och hållas nästan helt torr under ett par månader. I naturen är vinternederbörd liten, men dagg och duggregn ger fukt under nästan hela den torra perioden. Ge en svag gödning varje vecka under tillväxten med en fjärdedel till halva den rekommenderade dosen.
De kan odlas monterade om de kan få en tillräckligt hög luftfuktighet, men under varma och soliga dagar kan de behöva vattnas flera gånger. Vanligare är att odla i grunda krukor eller korgar klädda med ett lager sphagnummossa som torkar upp snabbt, och en lucker, väldränerande kompost, gärna med mycket kokosfibrer eller liknande. Efter en omplantering kan det ta ett par säsonger innan den blommar igen, så välj ett material som inte bryts ner för fort.

!Synonymer
__Homotypic Synonyms:__
//Eria thao// Gagnep. (1950)
__Heterotypic Synonyms:__
//Eria bulbophylloides// Tang & F.T.Wang (1974), nom. illeg.
//Eria thao// var. //wlodarczykii// Roeth (2010)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/eriathao.htm]]





















































!Allmänt och utbredning
Arten förekommer i de kustnära bergen av Anderna från Venezuela till Peru mellan 700 till 2745 meter över havet.
Precis som det låter kommer artnamnet av det latinska ''elegans'' efter blommans smäckra utseende.

!Utseende
Det är en varmväxande minatyrepifyt eller -litofyt som växer i fuktiga bergsskogar. Den är mycket variabel i både storlek och blomfärg. Bladet är ovalt trekantigt och kommer ensamt från pseudobulben.
Blommorna kommer under hösten och tidig vinter på stänglar som reser sig upp över bladen. Varje stängel är cirka fem cm långa och bär bara en blomma åt gången. De vaxartade blommorna är relativt små med en läpp som bara är två cm lång. Sepaler och petaler bär antennliknande utskott som är typiska för arten.

!Skötsel
De växer svalt till varmt, men med tillvänjning är restrepior relativt förlåtande, det man riskerar när man inte har dem i rätt temperatur är att de växer dåligt och inte blommar. De odlas företrädelsevis i en väldränerad kompost.
Restrepior är ovanligt tacksamma och roliga att sköta. De gillar fukt, de trivs bäst i vitmossa som aldrig tillåts torka ut helt. Den vill inte stå torrt men inte heller helt blött. De kräver inte mycket ljus, och när bladen blir röda får de lite för mycket ljus.

!Synonymer
__Heterotypic Synonyms:__
//Restrepia erythroxantha// Rchb.f. (1850)
//Restrepia leopardina// auct. (1899)
//Restrepia antennifera// subsp. //erythroxantha// H.Mohr (1996)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/reselegans.htm]]
[[Orchids of the Pleurothallid Allaiance|http://www.pleurothallids.com/restrepia_elegans.htm]]
[[Svenska OrkidéSällskapet|http://orkidesallskapet.se/phpBB2/viewtopic.php?t=110&sid=45d4c480da8e9de6e963b49cadc37250]]
[[Cracked Lens|http://www.crackedlens.co.uk/2005/11/poise.php]]
[[Orchid Photo Album by SyuTyuSen|http://www.edit.ne.jp/~fkoichi/ophoto/misc/rstp_ele.htm]] bilder






!Allmänt och utbredning
//Isotria// är ett släkte med två kända terrestriska arter, både endemiska för östra delen av Nordamerika. //[[It. medeoloides|a0a29758-f041-4146-82a9-b5da4f41cf3f]]// Raf. som växer från New England i östra Nordamerika söderut längs Appalacherna till Georgia och Tennessee och med isolerade populationer i Missouri, Illinois, Michigan, Ohio, Ontario. //[[It. verticillata|481a3c1d-f83a-4e4e-8568-d700167dc4d6]]// Raf. växer i östra och centrala delarna av Nordamerika från Maine till östra Texas och norrut till Ohiodalen och de stora sjöarna.
Den vanligaste arten, //[[It. verticillata|481a3c1d-f83a-4e4e-8568-d700167dc4d6]]//, pollineras av solitära bin i familjerna Andrenidae, Anthophoridae och Halictidae. Blomställningen är doftande, mångfärgad och har pollineringsguider, för att attrahera bina även om den saknar nektargömmor. Den betydligt sällsyntare //[[It. medeoloides|a0a29758-f041-4146-82a9-b5da4f41cf3f]]// med endast 20 lokaler och 500 kända individer däremot är självpollinerande, har ljusgröna blommor och saknar pollineringsguider, nektargömmor och doft. Populationer av //[[It. medeoloides|a0a29758-f041-4146-82a9-b5da4f41cf3f]]// tenderar att bestå av några få individer, de flesta lokalerna har mellan tre och tio plantor. Men tre nordliga lokaler har vardera över 100 plantor. Blommande individer utgör vanligtvis mindre än en tredjedel av varje population.
Namnet kommer från grekiskans ''iso'' som betyder "lika", och ''tri'' för "tre", förmodligen en hänvisning till de tre sepalerna av samma storlek och form.

!Utseende
De saknar pseudobulber utan bildar ett nätverk av långa, tunna rötter tätt associerade med svampars hyfer, mykorrhiza, som överlever vintern. Under våren kommer de ihåliga bladstammarna upp ur jorden och bildar i toppen mellan två och sex, men vanligen fem ovalt äggformade blad i ett plan, helt olikt någon annan orkidéart i Nordamerika. De kallas allmänt ''fiveleaf orchid'' just av den anledningen. Ovanför bladen kommer under senvåren eller sommaren en, eller mer sällan två, gulgröna till vita, gula eller purpurfärgade blommor. De tre sepalerna är likartade i färg, form och storlek, långsmala. Petalerna tillsammans med läppen omsluter könspelaren helt men är åtskilda. På läppen bildas köttiga åsar i avvikande färger.

!Skötsel
De är fleråriga, vintervilande plantor som fäller sina blad under hösten och allt ovan jord vissnar ner för att bilda nya blad nästkommande vår.  De växer främst i skogsområden, längs vattendrag och i fuktiga förhållanden, oftast i starkt sura jordar.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Pogoniieae ''Undertribus'': N/A

----
''Typart''
//[[It. verticillata|481a3c1d-f83a-4e4e-8568-d700167dc4d6]]// Raf. (1808)

----
''Uttal''
eye-SOH-tree-a

----
''Synonymer''
__Heterotypic Synonyms:__
//Odonectis// Raf. (1808)

!Rekommenderad läsning
[[eFloras|http://www.efloras.org/florataxon.aspx?flora_id=1&taxon_id=116626]] 2015-12-14

;Loyal A. Mehrhoff, 1983
://Pollination in the Genus Isotria (Orchidaceae)//, American Journal of Botany, Vol. 70, No. 10 (Nov. - Dec., 1983), pp. 1444-1453
:http://www.jstor.org/stable/2443342














!Allmänt och utbredning
Arten växer litofytiskt eller epifytiskt i ek- och barrskogar i södra Mexiko och Guatemala mellan 1000 och 2300 meters höjd. Det är en art som är sällsynt trots ett stort utbredningsområde.
I den mexikanska delstaten Guerrero har även en naturhybrid mellan //Epi. parkinsonianum// och //[[Epi. falcatum|009e3776-764c-431c-85ca-cfad71e0210a]]// påträffats.

!Utseende
Den har långa, hängande, förgrenande pseudobulber som kan bli upptill 30 cm långa och bilda hängande kluster upptill två meter långa. Basen av bulberna är omslutna av tunna, pergamentliknande täckblad. Från toppen av bulberna kommer ett eller flera köttiga, nästan cylindriska blad, upptill en halvmeter långa. Från toppen av bulben kommer under våren också en kort blomstängel som bär en eller upptill tre, nattetid starkt citrondoftande blommor. Blommorna kan bli 15 cm stora men ofta mindre. De långa, smala sepalerna och petalerna kan vara vitaktiga, ljust gula eller gulgröna. De är ofta tonade i purpur eller brons på utsidan. Den stora, vita läppen har en mer eller mindre distinkt gul eller gulorange fläck. Läppen är tre-flikad med den smala mittfliken betydligt längre än sidoflikarna.

!Skötsel
I sitt naturliga habitat växer den ljust i temperaturer från strax under nollan under vinter till mer än 26 grader under sommaren med en nattemperatur ner till tolv grader. De vill ha en så ljus växtplats som möjligt under hela året, bladen kan få en lila ton när den närmar sig den maximala toleransen.
Den odlas med fördel i hängande korgar i medelgrov barkkompost med en tillsats av perlite. Plantorna behöver torka ut lätt mellan vattningarna och med en längre torrperiod under vintern och en eller två månader med bara regelbundna sprayduschar. Sommartid, vattna åtminstone en gång i veckan och ge den gärna en hög luftfuktighet, cirka 70% sommartid och ner till 50% under vinter.
Gödsla med svag dos ofta under tillväxtperioden.
I naturen delar den sig, förutom fröförökning även genom bulber som faller av, så den är lätt att förmera vid omplantering.

!Synonymer
__Homotypic Synonyms:__
//Coilostylis parkinsoniana// Withner & P.A.Harding (2004)
__Heterotypic Synonyms:__
//Epidendrum aloifolium// Bateman (1841) nom. illeg.
//Brassavola pescatorii// Rchb.f. (1878)
//Epidendrum pugioniforme// Regel (1890 publ. 1891)
//Epidendrum falcatum// var. //zeledoniae// Schlechter (1923)
//Coilostylis pugioniformis// D.P.Banks (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://orchidspecies.com/coilparkinsoniana.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Epidendrum_parkinsonianum]]
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS311.html]]






























































!Allmänt och utbredning
//Pogonia// är ett litet släkte härdiga terrestriska orkidéer som omfattar <$view field="count"/> arter från Asiens och Nordamerikas tempererade myrmarker eller i våta diken. I vissa fall utsätts dessa livsmiljöer naturligt för brann i slutet av sommaren, men dessa orkidéer verkar bara att dra nytta av avlägsnandet av konkurrerande vegetation.
Det har fått sitt namn från det grekiska ''pōgōn'' och ''pōgōníās'' som betyder "skägg" respektive "skäggig" och anspelar på läppens krusiga kant. Kromosomtalet är 2n=18, 20.

!Utseende
Arterna saknar pseudobulber utan bildar ett rhizom med ett nätverk av tunna rötter som under våren skickar upp en tunn, upprätt, ihålig stam som blir mellan åtta till 50 cm lång. Från mitten av stammen kommer en eller ett fåtal ovalt avlånga blad. Tidigt under försommaren, juni till juli, innan plantorna blir överväxta av gräs och andra örtartade växter, kommer från toppen av stammen en ensam, mer sällsynt två eller tre, rosa eller vit, hallondoftande blomma. De tre sepalerna är avlångt ovala, symmetriskt utsträckta. Petalerna och läppen är inte sammansmälta men bildar ett utdraget rör. Läppens främre kant är krusig med markeringar i purpur och gult.
Några månader efter blomningen börjar bladen vissna och försvinner helt under vintern dvala.

!Skötsel
De växer vanligen på öppna, soliga platser, som hålls ständigt fuktigt eller översvämmas regelbundet. De är lokalt vanliga i fuktiga myrmarker och kärr.
Förökning sker genom att plantorna sätter mer än ett skott vart år, något de mer än gärna gör om de odlas under rätt omständigheter.
Den odlas inte speciellt ofta, men är relativt enkel att klara i ett orkidékärr eller i en fuktig, torvrik kompost, placerad i full sol. I plastkrukor kan den odlas med levande sphagnum eller en kompost bestående av sand och grov torv. Vattna rikligt och låt dem aldrig torka ut.
//Pogonia// är mycket köldtålig och behöver inte något särskilt skydd under vintern.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Pogoniinae ''Undertribus'': N/A

----
''Typart''
//[[Pog. ophioglossoides|19f95444-b509-42f3-ad96-e09672e14cb0]]// Ker Gawl. (1816)

----
''Uttal''
poh-GOH-nee-uh

----
''Synonymer''
N/A

!Rekommenderad läsning
[[eMOnocot|http://www.emonocot.org/taxon/urn:kew.org:wcs:taxon:161902]] 2015-12-15
[[Encyclopedia Britannica|http://www.britannica.com/plant/Pogonia]] 2015-12-15
[[Phytesia|http://www.phytesia.com/en/cultivation-how-to-grow-hardy-orchids.php?genre=8&PHPSESSID=57fe966bc7833867780178605b94d03e]] 2015-12-15
[[Go Orchids|http://goorchids.northamericanorchidcenter.org/genus/pogonia/]] 2015-12-15



























































!Allmänt och utbredning
Detta släkte som huserar <$view field="count"/> arter finner man som epifyter i Mexiko till Brasilien och Bolivia, där de växer från havsnivån till 1000 meter över havet.
Det är ett spännande släkte med hängande blomstänglar. Blommorna är mycket speciellt formade, med intrikata pollinations strukturer. Två roliga detaljer är att vissa av släktets medlemmar oftast växer naturligt i myrbon, som bygger bon i dess rötter. Och att de i naturen enbart pollineras av hanbin.
Det fick sitt namn efter en av Colombias högsta styrande under 1700-talet.

!Utseende
Alla arter har stora äggrundade till koniskt formade bulber med åsar, två till tre tunna blad och nedhängande blomstänglar med upp-och-ner-vända blommor. Bladen sitter parvis i toppen av bulben, är elliptiska och har tydliga bladnerver på undersidan.
Blomställningarna blir ibland över metern långa med underligt formade blommor. Dessa är hos nästan samtliga doftande, kanske inte direkt väldoftande, snarare egendomligt. Hållbarheten är kort, men kompenseras av att de producerar mängder av blomstänglar, ofta i omgångar under året.

!Skötsel
//Gongora// är varmväxande och tycker om ljusa odlingsförhållanden. De trivs bra i samma förhållanden som //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, med hög luftfuktighet, god luftcirkulation och drygt 25 grader. De uppskattar ordentligt med vatten och näring under tillväxtperioden. Låt den inte torka för mycket.
De odlas bäst i en korg så att stängeln kan hänga fritt. Undvik att flytta plantan när den ska till att blomma, knopparna faller lätt av.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Stanhopeinae

''Typart''
//[[Gga. quinquenervis|0865dca7-a936-4b8b-8673-77104cad1592]]// Ruiz & Pavon (1798)

''Uttal''
GON-gor-ah

''Synonymer''
__Heterotypic Synonyms__
//Acropera// Lindley (1833)

!Rekommenderad läsning
[[OrchidMania|http://www.orchids.org/ooc/Genera/Gongora/quinquenervis/index.shtml]]
[[the Orchid PhotoPage|http://www.orchidworks.com/orchids/gongora.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Gongora]]
[[Royal Horticultural Society|http://www.rhs.org.uk/learning/publications/orchidreview/orchid0105/gongoras.asp]]










































































!Allmänt och utbredning
//Cyrtosia// är ett litet släkte med <$view field="count"/> arter inom ett stort utbredningsområde som sträcker sig från Taiwan, södra Kina, Indokina och Asiens tropiska eller tempererade områden. De växer på marken i täta, skuggiga skogar.
Det är ett alltigenom mykoheterotroft släkte, arterna är helt beroende av svampar för att få sin organiska näring. //[[Ctsa. javanica|0311f859-d221-4b0e-8083-d8b8d20392a9]]// har gått så långt att den helt saknar blad och skickar bara upp en blomstängel ovan jord. I övrigt består den enbart av tjocka, underjordiska rhizom. Släktet är kända för att inte bilda någon nektar eller ätbart pollen för att belöna insekter vid pollinering utan använder sig sannolikt av en bedräglig teknik för att lura sina pollinatörer.

!Utseende
De underjordiska rhizomen är tjocka, köttiga eller knöllika. Stammen är upprätt, ofta med flera stammar från samma rhizom. Stammarna kan vara enkla eller grenade, gulbruna till rödbruna, med fjäll längs noderna. I toppen av stammen kommer en klase eller vippa med flera eller många medelstora blommor. Sepalerna är ofta håriga undertill. Den köttiga frökapseln innehåller stora, bruna frön som troligen sprids av fladdermöss eller fåglar.

!Skötsel
Då de helt förlitar sig på svampar för sin energi och i stort sett helt saknar ovanjordiska växtdelar är det mycket svårt och troligen få eller ingen som odlar dem.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Vanilleae ''Undertribus'': N/A

----
''Typart''
//[[Ctsa. javanica|0311f859-d221-4b0e-8083-d8b8d20392a9]]// Blume (1825)

----
''Uttal''

----
''Synonymer''
__Heterotypic Synonyms:__
//Conchoglossum// Breda (1830)

!Rekommenderad läsning
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=109096]] 2015-12-22

;Kenji Suetsugu, Atsushi Kawakita & Makoto Kato, 2015,
://Avian seed dispersal in a mycoheterotrophic orchid //Cyrtosia septentrionalis
:Nature Plants 1, Article number: 15052 Published online 05 May 2015, doi http://dx.doi.org/10.1038/nplants.2015.52









































!Allmänt och utbredning
//Pls. oxyglossa// är en epifytisk miniatyrart som växer i större delen av det tropiska Sydamerika i Guatemala, Belize, El Salvador, Costa Rica, Venezuela, Colombia, Ecuador, Peru, Bolivia och Brazilien upp till Mexiko. Det är den mest viddspridda arten inom släktet, och förekommer i tropisk regnskog och molnskogar från 200 upptill 2600 meter över havsnivån.
Artepitetet kommer från det grekiska ''oxyglossa'' som ordagrant betyder "vasspetsad tunga", och kommer av läppens form.

!Utseende
Plantan saknar pseudobulber utan växer i små buketter med fyra cm stora eliptiska blad som kommer en och en på upptill fem mm korta stjälkar från en underjordisk jordstam. De upprätta blomstänglarna som kommer under vintern eller våren från bladens bas blir mer än dubbelt så långa som bladen. Stängeln kan bära upptill tio små gulgröna blommorna som inte ens blir fyra mm stora. På sin höjd är två blommor utslagna samtidigt, men nya blommor kan komma successivt under upp till ett år. Sepaler och petalerna är en till fem mm långa i ljust gulgrönt, ofta med en rödaktig anstrykning. Läppen är äggformad och färgad i rödaktigt purpur, brunt eller grönt.

!Skötsel
Odla plantan i halvskugga under svala eller intermediära förhållanden. Plantera den i en mix av fin barkkompost med perlite eller sphagnum. Vatten regelbundet och håll komposten fuktig.

!Synonymer
__Homotypic Synonyms:__
//Pleurothallis oxyglossa// Schlechter (1912)
//Pleurothallis lancilabris// var. //oxyglossa// C.Schweinf. (1938)
__Heterotypic Synonyms:__
//Pleurothallis schulzeana// Schlechter (1918)
//Pleurothallis pygmaea// Hoehne (1933 publ. 1934)
//Platystele brasiliensis// Brade (1951)
//Platystele pygmaea// Pabst (1956)
//Platystele schulzeana// Garay (1974)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/platyoxyglossa.htm]]
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/index.php?option=com_content&view=article&id=824&Itemid=58]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Platystele_oxyglossa]]












!Allmänt och utbredning
Denna miniatyrart återfinns på stammarna av lövfällande träd i höglandets bergsmolnskogar i Thailand, Myanamar och Vietnam i det som kallas "den gyllene triangeln", mellan 600 och 2000 meters höjd.
Som artnamnet antyder hittades arten först i Thailand. Den tillhör talande nog också sektionen ''Umbellatae'' inom bulbophyllumsläktet. Det ursprungliga namnet, //Bubophyllum papillosum//, ger en fingervisning om det mest framträdande draget hos denna art. Det latinska ''papilla'' kan närmast översättas med "vårta". De laterala sepalerna är nämligen täckta med små vårtor.

!Utseende
Den har centimeterstora, koniska pseudobulber som sitter tätt tillsammans och bär varsitt elliptiskt, rödaktigt eller mörkt purpurfärgat blad upptill sju cm långt. Från basen av bulben kommer en blomstängel som blir kortare än bladen, bara tre eller fyra cm lång. Blommorna som blir fem cm stora kommer under sommarhalvåret i en lös paraplyform i toppen av stängeln. Deras färg sträcker sig från klart vinrött till klarorange eller mer sällan i två olika färgtoner. De laterala sepalerna har vuxit samman och bildar något som närmast kan liknas med en väldigt lång, smal tunga täckt med mycket små vårtor och en längsgående fåra.

!Skötsel
Det är en varmväxande epifyt som trivs bäst i ljus indirekt sol, 20000 till 30000 lux. Ge plantan mellan 14 grader som absolut lägst och upp till 30 grader som mest. Håll den fuktig under sommarmånaderna och låt den inte torka ut. Försök vattna tre till fem gånger i veckan. Under vintern kan komposten hållas åt det torrare hållet, bara lätt fuktig. En ordentlig luftcirkulation minskar risken för svampangrepp.
Odla plantan i en mix av sphagnum och fin barkkompost eller monterad. När plantan når en viss storlek och har fått tillräckligt med fukt börjar den producera många blomstänglar.

!Synonymer
__Homotypic Synonyms:__
//Cirrhopetalum papillosum// Rolfe (1908)
//Bulbophyllum papillosum// Seidenfadden & Smitinand (1961) nom. illeg. 
//Bulbophyllum thailandicum// Seidenfadden & Smitinand (1965) nom. illeg. 

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbthiorum.htm]]



































!Allmänt och utbredning
Det är medelstor epifytisk eller litofytisk art från kinesiska delen av Himalaya, Assam, östra Himalaya, India, Nepal, Bhutan, Sikkim, Myanamar, Thailand, Laos och Vietnam som växer i ständigtgröna låglandsskogar och primära bergsskogar likväl som mossiga kalkstensklippor mellan 200 och 2000 meters höjd.
Det är en av de 50 essentiella örterna som används i traditionell kinesisk medicin där den heter ''shí hú'' eller ''shí hú lán''.
Det latinska ''nobile'' betyder "ståtlig" eller "spektakulär" och hänsyftar antagligen på blomsterprakten när en fullvuxen planta uppvisar mer än 100 samtidiga blommor.

!Utseende
//Den. nobile// har tunna, vita rötter och ett sympodialt växtsätt där den bildar nya pseudobulber varje år. Bulberna är gulaktiga och med ålder får de avsnörningar eller midja med ett par cm mellanrum. Varje upprätt bulb kan bli upptill en halvmeter lång och under blomningen kan dussintals blommor komma på korta blomstjälkar direkt från både gamla bladlösa och nya bulber längs hela dess längd. Varje stängel blir bara ett par tre cm lång och bär två till fyra blommor. Knoppsättningen kan ta tre månader som startas av viloperiodens torka och lägre temperatur i oktober. Blommorna kommer vanligen under vintern eller våren men kan komma när som helst under året. De är vaxartade, vanligen hållbara två eller tre månader, doftande och variabla i framförallt färg.

!Skötsel
Den kan med fördel placeras utomhus under sommaren men bör skuggas mot brännande sol. Den reagerar väl på den naturliga temperatursänkningen som blir ute under nätterna, för knoppsättningen behöver den en period med cirka tio grader. Vid blomning ger en lägre nattemperatur längre blomningsperiod.
Komposten bör torka ut mellan vattningarna men varma dagar under tillväxtperioden mars till oktober fodras en ganska jämn fuktighet för bästa tillväxten. Under viloperioden behöver den två till tre månader med fem till tolv grader och bara så mycket vatten att bulberna inte skrumpnar. Det räcker oftast att bara duscha plantan regelbundet. Början av viloperioden indikeras av att bladen under hösten börjar gulna och slutligen faller av och av att toppen över det översta bladet på det nya skottet börjar få samma tjocklek som resten av bulben. Under tillväxten tillsätt gödning med varannan vattning, men överdosera inte. När viloperioden börjar, sluta helt med gödningen, minska vattningen till varannan eller var tredje vecka och flytta plantan till en ljusare växtplats. På våren, i mars eller april, när de nya skotten är ungefär en cm stora kan vattningen återupptas.
Omplantera den i medelgrov barkkompost med sphagnum vartannat eller vart tredje år under våren eller när blomningen är över. Planteras i små krukor. Den kan vara svår att få att sätta riklig blomning. Bulberna måste få växa färdigt innan viloperioden startas, man ser tydligt när sista bladet kommit. Ofta är det svårt att få tillräcklig tillväxtsäsong varvid blomning ersätts med nya keiki på bulberna.

!Synonymer
__Homotypic Synonyms:__
//Callista nobilis// Kuntze (1891)
__Heterotypic Synonyms:__
//Dendrobium nobile// var. //nobilius// Rchb.f. (1833)
//Dendrobium coerulescens// Wall. (1838)
//Dendrobium lindleyanum// Griff. (1851)
//Dendrobium nobile// var. //formosanum// Rchb.f. (1883)
//Dendrobium nobile virginale// Rolfe (1900)
//Dendrobium formosanum// Masam. (1933)
//Dendrobium nobile// f. //nobilius// M.Hiroe (1971)
//Dendrobium nobile// var. //alboluteum// Huyen & Aver. (1989)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendrobnobile.htm]]



























!Allmänt och utbredning
Det är en något krypande dvärgepifyt endemisk för torra, kustnära områden av Brasilien, där de växer varmt och soligt mellan 100 och 400 meter över havsnivån.
Den börjar nu bli ovanlig i vilt tillstånd, då den är mycket eftertraktad av illegal samlare.

!Utseende
Arten har tjocka rötter och små pseudobulberna som oftast bara blir en knapp dm höga. Bulberna bär två hårda, tjocka blad som åtminstone som unga är rödfläckiga.
Liksom //[[C. violacea|7ece1cd9-6da5-43e3-b6ad-b85525932889]]// och //[[C. schilleriana|d507f661-876a-4f96-9b8b-57933bcc967f]]// öppnar sig de upptill åtta cm stora blommorna kort efter att den nya tillväxten har utvecklats klart på senvåren. En eller två knoppar framträder på en kort stängel mellan bladen när dessa vecklar ut sig. De hållbara, svagt doftande blommorna är stora i förhållande till plantan, blommorna kan bli en dm stora på en två dm stor planta. Petalerna är gula och översållade med olivbruna eller rödaktiga prickar. Läppen är mörkt rosa med tydliga nerver i purpur.

!Skötsel
Den ideala odlingen är monterad på en bit kork, drivved eller trädormbunke. //C. aclandiae// verkar föredrar en horisontal montering. I annat fall går det bra i små grunda korgar med en väldränerad kompost.
Den föredrar en varm plats, men det är en av de mest ljustoleranta arterna inom cattleyasläktet och tål till och med en del direkt sol.
Vattna monterade plantor varannan dag under sommaren och håll den något torrare under vintern, med vattning två gånger i veckan. Öka vattningen om de senaste bulberna verkar börja skrumpna.
Arten har ett rykte att vara temperamentsfull. Den kan glatt växa utanpå en lerkruka och nästan täcka krukan med sitt kraftiga rotsystem. Men så fort man försöker plantera om den i en ny kruka börjar den tyna bort. Det visar på att arten inte tycker om att bli störd och den vill inte växa i en kompost som hålls ständigt fuktig, utan rötterna behöver torka upp inom ett par timmar efter vattningen.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum aclandiae// Rchb.f. (1861)
__Heterotypic Synonyms:__
//Cattleya acklandiae// Planch. (1851) orth. var.
//Cattleya aclandiae// var. //grandiflora// Buyss. (1878)
//Cattleya aclandiae// var. //salmonea// auct. (1893)
//Cattleya aclandiae// var. //alba// L.C.Menezes (2002)
//Cattleya aclandiae// f. //alba// F.Barros & J.A.N.Bat. (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cataclandiae.htm]]
[[Orchid Online|http://www.speciesorchids.com/CattleyaAclandiae.html]]
[[the Orchid Photo page|http://www.orchidworks.com/orchids/cattleya/dale017c.htm]]











All species five species of Dryadorchis are epiphytes in coastal and other forests from 0 to 1700 m, endemic to New Guinea.









!Allmänt och utbredning
//Rstp. sanguinea// är en epifytisk miniatyrart från Antioquia och Cundinamarca i Colombia, där den växer i molnskogar mellan 1500 och 2800 meters höjd.
Artepitetet kommer från det latinska ''sanguineus'' som betyder "blodröd" och hänvisar till blommans färg.

!Utseende
Det är en liten, klumpbildande epifyt som blir runt tio cm hög, De har ett ensamt, spjutformigt blad på en lång bladstjälk som är omsluten av täckblad vid basen. Bladen är läderartat hårda i grönt med nyanser i purpur. De blommar under vintern och våren med en lång blomstängel som kommer från bladfästets bas mot bladstjälken längs ovansidan av bladet. Stängeln bär successivt en blomma åt gången under lång tid. Blommorna är fyra till sex cm stora. De laterala sepalerna är delvis sammanvuxna och täckt med ett mörkrött mönster medan den dorsala sepalens nervatur är purpurfärgad. Artens läpp är större än vanligt hos blommorna inom släktet och med samma färg och mönster som de laterala sepalerna.

!Skötsel
Det är en svalväxande epifyt som behöver halvsol, mycket fukt och bra luftcirkulation för att trivas. De föredrar mellan 20000 och 30000 lux, starkt indirekt solljus. Temperaturen kan få gå upp till 24 grader under dagen och ner till 16 under natten. Beroende på hur vattenhållande komposten är kan de behöva tre till fem vattningar i veckan för att tillväxa ordentligt. Vanligtvis är en fin barkkompost att rekommendera men de kan även odlas i ren sphagnum.
De kan lätt förökas genom att ett äldre blad placeras direkt i en kruka med mossa som hålls fuktig och lite skuggigare, gärna med extra hög luftfuktighet. Det bildar då nya rötter och blir stammoder åt en ny planta, en klon av den ursprungliga.

!Synonymer
__Heterotypic Synonyms:__
//Restrepia antioquiensis// Schlechter (1920)
//Pleurothallis antioquiensis// P.H.Allen (1948)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/ressanguinea.htm]]
[[Orchids in Bloom|http://orchidsinbloom-ron.blogspot.se/2011/10/restrepia-sanguinea.html]] en blogg
[[Orchid Species Preservation Foundation|http://www.orchidspecies.ca/directory/restrepia/restrepia-sanguinea/details/]]
[[orcheeder|http://www.orcheeder.com/news/posts/4822/]]
[[The Pleurothallid Alliance|http://www.pleurothallids.com/index.php?option=com_content&view=article&id=905&Itemid=58]]























!Allmänt och utbredning
//Ancstrc. rothschildianus// är endemisk från ett relativt smalt latitudinalt intervall från Sierra Leon till södra Nigeria i ekvatoriala västra Afrika. Det är en ovanlig, liten regnskogsepifyt som växer på nakna trädstammar och grova grenar av stora skogsträd, vanligtvis vid måttliga höjder nära kusten. Men växter har påträffats på höjder mellan 500 och 1100 meters höjd inåt landet så långt österut som en regnskog i centrala Uganda.
Hela släktet består enbart av denna art och //[[Ancstrc. thomsonianus|180fe7ef-5ca4-49db-96a8-ad73412572e2]]//. Den är döpt för att hedra lord Lionel Walter Rothschild, bankir, entomolog, zoolog och grundaren av det naturhistoriska museet i Tring, Hertfordshire, England.

!Utseende
Det är en sympodialt växande planta med breda, koniska eller pyramidformade pseudobulber som bär två eller tre breda, lansettlika blad. Hela plantan blir sällan större än 35 cm hög. De fem cm stora bulberna brukar liknas med chokladtopparna Hershey´s Kisses.
De är lövfällande och släpper sina blad innan blommorna kommer. Under hösten och vintern, i slutet av torkperioden, kommer från basen av en mogen, bladlös bulb en upptill 20 cm lång, luden blomstängel. Varje stängel kan bära två till fem stycken åtta cm stora, hållbara blommor. Blommorna är ljust rosa med en mörkare rosafärgad, treflikad läpp. De har en mild, kryddig doft med metalliska inslag. Om luftfuktigheten är mycket hög när blommorna slår ut kan dessa missfärgas eller få fläckar.

!Skötsel
Ge dem en ljus växtplats utan direkt sol, 20000 till 27000 lux, ungefär samma som för //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, och kraftig luftcirkulation. Håll temperaturen mellan 17 och 27 grader.
Det är en lövfällande art som kommer från ett varmt område med kraftiga regn från våren till hösten med en väldigt utpräglad torkperiod under två till tre månader på vintern. 
Efter blomningen fram till uppkomsten av nya skott, bör vattningen minskas men inte upphöra, komposten kan tillåtas torka upp mellan vattningarna för att uppmuntra plantan att gå i vila tre månader som den gör i naturen. När de nya skotten är ett par cm stora, ungefär en månad efter blomningen, kan vattningen åter ökas. Mogna pseudobulber blomma bäst om de får rikliga mängder vatten och gödningsmedel under tillväxtperioden, låt inte komposten torka ut.
När de nya skotten kommer på våren är den bästa tiden för omplantering. De klarar inte att rötterna är ständigt blöta utan de bör odlas i en grovkornig, väldränerad kompostmix med perlit. Dess långa, tunna rötter och krypande växtsätt gör att korgar eller en grund skål eller kruka, med ett fukthållande lager överst är idealisk. Odlare har rapporterat stora framgångar vid odling i grunda skålar med leca och ett lager sphagnum överst. Det krävs då dagliga vattningar under sommaren.
Varje bulb kan ge upphov till två eller tre nya bulber varje säsong så de kan snabbt bilda stora bestånd.

!Synonymer
__Heterotypic Synonyms:__
//Ancistrochilus thomsonianus// var. //gentilii// De Wild. (1903)
//Ancistrochilus hirsutissimus// Kraenzl. (1914)
//Pachystoma rothschildianum// Sander (1927)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Ancistrochilus_rothschildianus]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/ancistrochilusrothchidianus.htm]]
[[OrchidsWiki|http://orchids.wikia.com/wiki/Ancistrochilus_rothschildianus]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/Ancistrochilus_rothschildianus.html]]
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS256.html]]





!Allmänt och utbredning
Arten växer längs floden Rio Sepotuba i provinsen Mato Grosso, Brasilien, mellan 100 och 300 meters höjd.
//Ctsm. schmidtianum// liknar sin frände //[[Ctsm. saccatum|445c114a-4544-46fc-bab3-6caf10b9f1b4]]// men skiljer sig på flera punkter, bland annat den köttiga läppen med vårtor och kanter som inte rullar upp sig. Framförallt de honliga blommorna skiljer sig åt mellan arterna.
Artnamnet kommer efter Anthony Schmidt, en orkidéntusiast som infört ett flertal orkidér i odling.

!Utseende
De spolformigt avlånga, nästan cigarrformade, pseudobulberna blir uppåt 20 cm långa och kommer tätt grupperade i klungor. I toppen på varje bulb kommer åtta till tio välvda blad. Från basen av bulben kommer under sommaren eller hösten en halvmeter lång, bågformigt hängande blomstängel som kan bär ett kluster av upptill ett dussin blommor. Varje blomma blir sju till tio cm stor med en stor, köttig och blodröd läpp med fransar längs kanten. Sepaler och petalerna är ljust gulagröna täckta med röda prickar.
Beroende på ljuset under vilken plantan växer kan samma planta producera han-, hon- eller hermafroditiska blommor som ser olika ut.

!Skötsel
Ju ljusare en planta växer, desto större är chansen att den producerar honblommor. Ju mörkare den växer desto större är sannolikheten för de mer attraktiva hanblommorna. Odla den varmt, mellan 24 och 30 grader, och med hög luftfuktighet.
Under den aktiva tillväxten behöver de mycket vatten och gödning, ofta. De bör behandlas som //[[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]// och inte tillåtas torka ut helt för mer än en dag. 
De odlas bäst i en hängande korg med sphagnum som hålls lätt fuktig hela tiden. Efter blomningen tappar de vanligen sina blad och går i vintervila. De bör då hållas helt torra. Bäst är att ta ur plantan ur komposten, klippa av de nu döda rötterna och placera bulberna i en tom lerkruka. De kan nu vattnas tillsammans med övriga växter utan att ruttna. När de nya skotten kommer på våren och har två, tre cm långa rötter kan de planteras i en kompostmix av små lecakulor, kol och ungefär en femtedel kokostorv. Under viloperioden kan stora plantor delas i mindre med två eller tre bulber i varje kruka.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/catschmitdianum.htm]]
[[Brazilian Orchids|http://www.delfinadearaujo.com/datacent/catase16.htm]]


























































































































































































































!Allmänt och utbredning
Denna terrestrisk eller litofytiska art växer på klippor längs vattendrag från östra Bhutan till nordvästra delen av provinsen Yunnan i södra Kina mellan 2300 och 2900 meters höjd över havet.
Det är en av de höstblommande pleionearterna och upptäcktes så sent som under mitten av 1980-talet.

!Utseende
Den får uppseendeväckande, ovanifrån tillplattade, mörkt gröna pseudobulber som bär en eller två tunna, ovala blad som kan bli uppåt 20 cm långa. Den tio cm långa blomstängeln som endast får en enda blomma, kommer vanligen under augusti eller september efter att bladen vissnat och fallit av. Blomman blir sju cm stor med runda sepaler i djupt rosa. Sepalerna är sammanväxta vid basen och bildar ett rör. Läppen är också rosa med mörkare markeringar och tre små, vita krusiga åsar. Vissa plantor har en antydan till gult i läppens svalg. Blomman håller i två till tre veckor. De nya rötterna börjar tillväxa redan sent på hösten, till och med innan blommorna vissnat.

!Skötsel
Det är inte den enklaste arten för en nybörjare, men en skötsel som för //[[Pln. maculata|76e3ee68-0e54-479c-b38c-71ffafcb8998]]// och //[[Pln. praecox|7e9f11d6-2e9a-4137-a589-e44254121a66]]// är en bra början. Dock kan den behöva en mer näringsrik kompostmix än bara sphagnum och perlite som för //[[Pln. maculata|76e3ee68-0e54-479c-b38c-71ffafcb8998]]//. Tillsätt fin barkkompost och eventuellt lite nedbruten lövkompost. Oftast rekommenderas ett epifytisk odlingssätt som för ovanstående arter men den växer oftast lika bra placerad högt upp i eller ovanpå komposten i grunda krukor.
Placera den i ljus halvskugga i ett svalt fönster där temperaturen håller sig under 23 grader så kommer den frodas. Mellan senhösten till tidig vår är viloperioden för arten. Då bör temperaturen inte gå under fem grader, men den kan klara att temperaturen tillfälligt går ned till minus fem grader.
Under tillväxtperioden behöver den konstant vatten och svag gödning. Sluta vattna när bladen faller och ge den bara regelbunden duschning, i övrigt ska komposten hållas nästan helt torr.

!Synonymer
N/A

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Pleione_saxicola]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/pleionesaxicola.htm]]
[[Pleione Info|http://www.pleione.info/imagepages/thumbnailpages/saxicola%20thumbs.htm]] foto
[[Rare Plants|http://rareplants.co.uk/product.asp?P_ID=3070&strPageHistory=related]]
[[eFloras|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242338816]]



















!Allmänt och utbredning
Det är en minatyrart som växer epifytiskt längs flodstränder och hyggeskanter i Nya Guineas bergsskogar mellan 100 och 1300 meters höjd över havsnivå.

!Utseende
Det är en liten planta med kompakt växtsätt som blir mindre än åtta cm hög. Pseudobulberna är runda eller ovala med två till fyra avlånga, smala, ljusgröna blad i toppen. Om bladen blir gulaktiga får plantan för mycket ljus och om de blir mörkgröna eller inte är så styva, får den för lite. Själva blomman är mellan en och två cm stor och kommer under senvintern eller tidig vår på en kort blomstängel som nästan döljs bland bladen. Varje stängel bär en eller mycket sällan två stjärnformade blommor som är ganska hållbara.

!Skötsel
Håll den jämnt fuktig hela året och mellan 20 och 30 grader, mindre under vintern men aldrig under 16 grader. Vattna en eller två gånger dagligen under den varma sommaren med vatten av bra kvalité och svag gödning, en åttondel till en fjärdedel den rekommenderade dosen. Den behöver hög luftfuktighet och en ljus växtplats. En något torrare vinter utan att plantan torkar ut helt gynnar blomningen. Håll också in på gödningen under vinter tills den nya tillväxten kommer under våren. Om knopparna gulnar, torkar och faller av innan de öppnas beror det vanligen på för lite ljus eller att rötterna ruttnat bort. Det kan också bero på etylengas från mognande frukt eller drastiska temperaturförändringar.
Odlas med fördel monterad på kork med lite sphagnum eller i kruka med ren, levande sphagnum eller en väldränerande mix av medelgrov barkkompost, perlite och sphagnum. Plantera om när den nya tillväxten har nått fram till kanten på krukan eller när komposten börjar brytas ner. De föredrar att torka upp snabbt så använd så liten kruka som möjligt.

!Synonymer
__Homotypic Synonyms:__
//Pedilonum cyanocentrum// Rauschert (1983)
//Oxyglossellum cyanocentrum// M.A.Clem. & D.L.Jones (2002)
__Heterotypic Synonyms:__
//Dendrobium lapeyrouseoides// Schlechter (1912)
//Dendrobium flavispiculum// J.J.Sm. (1913)
//Pedilonum flavispiculum// Rauschert (1983)
//Pedilonum lapeyrouseoides// Rauschert (1983)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dencyanocentrum.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dendrobium_cyanocentrum]]



































































































































































































































































































































































!Allmänt och utbredning
Denna miniatyrart växer epifytiskt på träd av släktet //Melaleuca// i myrtenfamiljen i norra Australiens och Nya Guineas öppna låglandsskogar mellan havsnivå och 760 meters höjd.
//Den. canaliculatum// misstas ofta för //[[Den. carronii|59892f10-92ff-46ea-bc87-3fffbf69ba86]]// som är snarlik men där det dorsala kronbladet är längre än petaler och sepaler medan de hos //Den. canaliculatum// alla är lika långa.
Artnamnet kommer från latinets ''canaliculus'' som betyder "kanal" och anspelar på fåran längs bladens ovansida.

!Utseende
Den får korta, spolformade pseudobulber som är omslutna av ett täckblad. Bulberna påminner till formen om en lök, något som givit den smeknamnet ''Onion Orchid'' down-under. Från toppen av bulben kommer två till sex köttiga, pennlika blad med en längsgående fåra på ovansidan. Under vintern eller våren kommer upptill åtta stycken blomstänglar per bulb. Både gamla och nya bulber kan producera tio till 40 cm långa, upprätta blomstänglar från noderna nära toppen. Varje blomställning består av många två cm stora, doftande blommor i många skiftande färger från vitt, rosa, violett, gult och brunt till nästan svart.

!Skötsel
Det är en varmväxande art som älskar mycket ljus, hög luftfuktighet och regelbundna vattningar med svag gödsling under tillväxtperioden från vår till höst. Under vintern bör vattningen minskas kraftigt, från var tredje dag till en gång var sjunde till var tionde dag. Håll den torrare än de flesta andra dendrobier. Den vanligaste orsaken till att plantorna går bort är att de inte får torka upp ordentligt mellan vattningarna.
De föredrar en varm växtplats och kan inte fördra nattemperaturer under tio grader.
Odlas med fördel monterad på kork eller bitar av trädormbunke. Om de odlas i krukor med grov bark och träkol bör de planteras om vartannat år. De blir lätt topp-tunga och lerkrukor är att föredra. Eftersom de föredrar att snabbt torka upp mellan vattningarna rekommenderas små krukor.

!Synonymer
__Homotypic Synonyms:__
//Callista canaliculata// Kuntze (1891)
//Cepobaculum canaliculatum// M.A.Clem. & D.L.Jones (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dencanniculatum.htm]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/DendrobiumCanaliculatum2.html]]































































!Allmänt och utbredning
//Phrag. reticulatum// [frag-muh-PEE-dee-um reh-tick-yoo-LAY-tum] är en art endemisk för södra Ecuador och Peru där den växer terrestriskt på branta, sandiga jordvallar längs rinnande vatten i mycket fuktiga låglandsmolnskogar mellan 900 och 2500 meters höjd.
Det var Gustav Wallis som gjorde en uppsamlingsresa under 1800-talets senare hälft och fann dem växa på över 2000 meters höjd på branta sluttningar av röd vulkanisk lera.
Artepitetet kommer från det latinska ''reticulatum'' som betyder "nätliknande" efter det nätliknande mönstret på blommornas petaler. Taxonomiskt tillhör den sektionen Lorifolia.

!Utseende
Det är en stor art som bildar en solfjäder av mörkgröna blad och under sensommaren och hösten kommer en mer än halvmetern lång blomstängel med en eller två samtidigt öppna, smaragdgröna blommor. Stängeln kan producera fler än 20 blommor under flera månaders tid. Blommorna kan bli mer än 15 cm stora med gröna sepaler och petaler med toner av brons längs de vågiga kanterna.

!Skötsel
Där de växer i sitt naturliga utbredningsområde sprider rotsystemen ut sig nära ytan under ett tjockt lager mossa. Leran är ständigt fuktig men har en smulig, väldränerad textur, och håller ett pH runt 5,5. Dagstemperaturen ligger runt drygt 26 grader för att falla ner till 15 under nätterna.
Ge den en växtplats i måttlig till starkt ljus, 8000 till 15000 lux för småplantor, mer för fullväxta plantor. Vintertid gärna upptill 35000 lux för att främja god tillväxt och blomning.
Ge svag gödning och vattna ordentligt med vatten av god kvalité och spola igenom komposten en gång i månaden för att skölja ur salter som annars lätt bildar alltför höga nivåer.
Odla i en fin barkkompost, gärna med tillsats av sphagnum men det är inte nödvändigt.

!Synonymer
__Homotypic Synonyms:__
//Selenipedium reticulatum// Rchb.f. (1874)
//Cypripedium reticulatum// Rchb.f. (1882)
//Paphiopedilum reticulatum// Pfitzer (1894)
//Phragmipedium boissierianum// var. //reticulatum// Pfitzer (1903)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragreticulatum.htm]] 2015-10-27











!Allmänt och utbredning
Arten är endemisk för två berg på centrala och östra delen av den indonesiska ön Sulawesi, där den växer terrestriskt i fuktiga bergsmolnskogar mellan 1350 och 1420 meters höjd.
//Paph. robinsonianum// är uppkallad efter den brittiske taxonomen och botanisten Dr. Alastair Robinson, specialiserad på köttätande växter och välkänd expert på //Nepenthes//, som uppmärksammade arten för andra taxonomer specialiserade på paphiopedilumsläktet.
Artepitetet //robinsonianum// ska inte förväxlas med //robinsonii//. //Paph. robinsonii// är en synonym till //[[Paph. bullenianum|e494260f-9340-4114-a970-85aca3aaf6a6]]//. På samma sätt är //Paph. Robinsonianum//, notera den kapitaliserad stavning, ett ogiltigt hybrid namn synonymt med //Paph. Euryale//, //[[Paph. lawrenceanum|95d324e4-4af0-412e-9f1f-dac2b4142b44]]// × //[[Paph. superbiens|6c35bc33-ec75-4d33-bea4-e5fedbcfed28]]//.
Plantan och blomman har några morfologiska likheter med //[[Paph. javanicum|265a9b4f-971a-45d2-a42b-5d524c87368b]]// men den dorsala sepal är vit med en smaragdgrön mitt, vridna kanter på petalerna och tunna hår längs kanten i stället för hela kanter på //[[Paph. javanicum|265a9b4f-971a-45d2-a42b-5d524c87368b]]//. Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Barbata.

!Utseende
Det är en lite art med tre till sex stycken ljus- och mörkgröna marmorerade blad som blir 13 till 18 cm långa och tre till fem cm breda. Den blommar vanligen under augusti på en upprätt blomstängel, upptill 30 cm lång och täckt av täta, purpurfärgade hår. Blomstängeln bär en ensam blomma som kan bli elva till 13 cm stor. Den dorsala sepal är vit med en stor, smaragdgrön fläck i mitten ner mot basen. Petalerna är ljusgröna, strimmiga i mörkare grönt mot basen och purpurfärgade, vridna spetsar. Den har en ovanligt formad, vit, elliptisk, staminoid som kan tyda på autogami, eftersom nästan alla andra arter inom släktet pollineras av blomflugor som lockas av staminoidens honfluge-liknande utseende. Läppen är grön och brunfärgad. Sidoflikarna av läppen är inåtböjda, täckta med otaliga, små, rödaktiga vårtor.

!Skötsel
Den trivs i skugga och intermediär temperaturer med jämn fuktighet. Odla i en väldränerad kompost med medelgrov barkkompost och perlite eller sphagnum.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphrobinsonianum.htm]] 2015-08-17
[[A garden's chronicle|http://carnivorousockhom.blogspot.se/2014/02/paphiopedilum-robinsonianum-new-species.html]] 2015-08-17











!Allmänt och utbredning
Denna miniatyrart är endemisk för de kinesiska provinserna Guangxi och sydvästra Guizhou, troligen också sydöstra Yunnan och Vietnam där de växer epifytiskt nära basen på mossiga träd eller litofytiskt på kalkstensklippor i täta skogar mellan 300 och 1200 meters höjd över havet.
Blommorna är självfertila men kan inte mekaniskt självpollineras utan behöver hjälp av honor av blomflugorna //Allograpta javana// eller //Episyrphus balteatus//. Blomflugorna landa på den hala centraliserad vårtan mitt på den blanka, klargula staminoiden och faller sedan baklänges ned genom läppens öppning. De blir tillfälligt instängd i den uppblåsta kammaren som bildas av läppen och könspelaren.
Det finns två accepterade varianter av arten, //Paph. barbigerum// var. //barbigerum// och //Paph. barbigerum// var. //sulivongii// Schuit. & P.Bonnet (2009) där den senares dorsala sepal är vit med röda ränder, gula petaler med röda ränder och med en gul läpp istället för en orange dorsal sepal med vit spets, orangebruna petaler och rödorange läpp.
Namnet kommer från latinets ''barba'' som betyder "skägg" och kommer från de små testarna med fina hår vid basen av varje petal.
Kromosomtalet är 2n=26.

!Utseende
Det är en liten planta som bildar täta bestånd med fyra till sex långsmala blad som sällan blir 20 cm långa och bara två cm breda. Bladen är jämnt ljusgröna med en purpurnyans mot basen. Under höst eller vinter kommer en knappt tolv cm lång, gulbrun blomstängel med en liten, ensam blomma. Blomman blir drygt sex cm tvärs över och är mycket variabel i färg från rent vita till mörkt rött med former i rosa, orangea och purpurfärgade men den vanligaste formen är en vit eller väldigt ljust grön synsepal med röda eller bruna petaler. Staminoiden är klargul för att locka pollinerare.

!Skötsel
Under vinter och vår är dess naturliga habitat insvept i en ständig dimma och nästan ingen annan fukt. Under sommar och höst är området utsatt för kraftiga regn.
De är tacksamma att odla på fönsterbrädan eller under ljus och bör ges ljus skugga under intermediära temperaturer. Plantera i små krukor med plats för en eller två års tillväxt, i en väldränerad mix av fin barkkompost och perlite. Plantera om så fort den nya tillväxten visar sig efter blomningen. Vattna regelbundet var fjärde eller var femte dag och ge svag gödning ofta, 100ppm varje vecka.
För att inducera blomning behövs några veckor med minskad vattning och lägre temperaturer under vintern.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum insigne// var. //barbigerum// Braem (1988)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphbarbigerum.htm]] 2015-02-18
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_barbigerum]] 2015-02-18
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/paphiopedilum/barbigerum/index.html]] 2015-02-18
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242335736]] 2015-02-18
[[Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/3d-barbigerum/barbigerum-spin.html]] 3D 2015-02-18

;J. Shi, Y.-B. Luo, P. Bernhardt, J.-C. Ran, Z.-J. Liu andQ. Zhou
://Pollination by deceit in Paphiopedilum barbigerum (Orchidaceae): a staminode exploits the innate colour preferences of hoverflies (Syrphidae)//, Plant Biology, Volume 11, Issue 1,  pages 17–28, January 2009, DOI: 10.1111/j.1438-8677.2008.00120.x, hämtad 2015-02-18



































































!Allmänt och utbredning
Arten är vittsprid men inte vanlig i fuktiga molnskogar i området från Nicaragua till Colombia och Venezuela, som en medelstor, svalväxande epifyt från 800 till 2700 meters höjd.
Den kan fylla ett helt hus med sin kryddiga väldoft, en doft som utvecklats för att locka till sig hanbin av arten //Eulaema polychroma// som pollinerar blomman. De samlar in och förvara blommans doft i speciella organ på bakbenen. De använder den sedan vid uppvaktningen av honorna. Man tror att honbina väljer partner efter kvantiteten och diversiteten hos hanens insamlade dofter.

!Utseende
En vacker och ovanlig planta med rundat pyramidformade till ovala pseudobulber som bär ett ensamt, avlångt blad. De blommar under sensommaren och hösten med tre till tio tätt sittande blommor på en två dm lång blomstängel som kommer från en fullväxt bulb. Blommorna vissnar snabbt, som mest håller de fyra dagar.
Som hos alla stanhopeaarter kommer blomstängeln ut under plantan. Sepalerna och petalerna är gula till gulorangea eller ibland gröngula, med små röda markeringar. Könspelaren med sina breda vingar är vanligen grönvit. Läppen har formen av en insekt. Den ihåliga hypochilusen har två stora, mörkbruna ögon. På insidan finns körtlar som producerar en berusande vätska. Mesochilusen har två horn som simulerar insektens ben och epichilusen liknar en insektskropp. Blomman kan förväxlas med den hos den nära släktingen //[[Stan. graveolens|a1dfff07-763c-4b10-98a2-4f784a88474b]]//.

!Skötsel
Odlingen bör vara sval eller intermediärt, ljus och fuktig. Nyckeln till att lyckas med arten är fukten, den måste hållas fuktig hela tiden. På grund av sin hängande blomstängel är det bäst om den odlas i en öppen korg.

!Synonymer
__Heterotypic Synonyms:__
//Stanhopea aurea// Loddiges (1841)
//Stanhopea venusta// Lindley (1841)
//Stanhopea aurea major// Lodd. (1844) nom. nud.
//Stanhopea wardii// var. //aurea// Henshall (1845)
//Stanhopea amoena// Klotzsch (1852)
//Stanhopea inodora// var. //amoena// Lindley (1852)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/stanhopeawardii.htm]]
[[OrchidHunter|http://www.pbs.org/wgbh/nova/orchid/gall_03.html]]
[[Camp Lot A Noise|http://www.clanorchids.com/pages/91016s.htm]]
[[UrsulasPage|http://www.kammlott.net/Stwardii.html]]


!Allmänt och utbredning
Släktets <$view field="count"/> accepterade arter växer terrestriskt i varma låglandområden i Sydafrika, Konungariket Saudiarabien, Indien, Kina, Japan, Indonesien, Australien och otaliga öar i Stilla havet och Indiska oceanen.
Det är ett dåligt känt släktet som ofta inte ens känns igen som orkidéer. Hos de arter som bildar blommor kommer bladen först efter att blommorna vissnat ner och denna tidsseparation av blommor och blad gör kompletta samlingarna sällsynta. Vissa arter har beskrivits endast utifrån blommor, andra bara från blad, och ibland har blommor och blad från olika arter kopplats ihop felaktigt. Situationen förvärras av växternas efemära natur; blommorna är kortlivade, fruktbildningen snabb med frukten mogen redan innan bladen kommer, och alla ovanjordiska delar dör tillbaka i slutet av växtsäsongen, vilket gör arterna svåra att lokalisera och bestämma. Följaktligen är artbeskrivningarna ofta otillräckliga, vaga och ibland överlappande, och användbara kännetecken förlorade hos torkade herbarieexemplar.
Släktnamnet kommer från det latinska ordet ''nervus'' som betyder "ådrad" efter bladens framträdande mönster.

!Utseende
De flesta medlem av släktet växer terrestriskt i små kolonier. De vintervilande, underjordiska pseudobulberna producerar under våren en upprätt blomstängel med en eller ett fåtal blommor, i de fall arten faktiskt bildar blommor, och först när blomningen upphört kommer ett enda runt eller hjärtformat blad på en kort, köttig stjälk från basen av den döende blomstjälken, tätt intill marken. Ofta har bladen mönster i silver på ovansidan och i purpur på undersidan.
De icke-blommande arterna har bara ett enda blad och växer antingen tätt längsmed marken eller är upprätta.
Blommorna hos de australiska arterna är svåra att få se i det vilda eftersom de kommer snart efter de första kraftiga regn i regnperioden och lever bara i en till fyra dagar.

!Skötsel
När bladen vissnat ner på hösten behöver de en sval, torr viloperiod under vinter. Tidigt på våren planteras de i vida, djupa skålar, drygt tre cm under ytan av en väldränerad men fuktighetshållande mix av halvmultnad lövkompost, perlite och sphagnum. Beroende på hur de växer i naturen kan de tåla mer eller mindre sol. Arter som växer i gräsmarker behöver i allmänhet inte skuggas lika mycket som arter från skogsmiljöer men i regel är skugga att rekommendera. Under tillväxten behöver de mycket vatten, håll dem fuktiga utan att de får torka ut.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Gastrodieae
''Undertribus'': Nervilliinae

''Typart''
//Ner. aragoana// Gaudich. (1829) synonym till //[[Ner. concolor|5847328f-dbae-4682-a111-01d5628bf5b0]]// Schltr. (1911)

''Uttal''
ner-VIL-ee-uh

''Synonymer''
__Heterotypic Synonyms:__
//Stellorkis// Thouars (1809)
//Aplostellis// Thouars (1822)
//Cordyla// Blume (1825) nom. illeg.
//Roptrostemon// Blume (1828)
//Haplostellis// Endl. (1837)
//Rophostemon// Endl. (1837) orth. var.
//Bolborchis// Zoll. & Moritzi (1846)

!Rekommenderad läsning
[[Wikipedia|http://en.m.wikipedia.org/wiki/Nervilia]]
[[African Orchids|http://www.africanorchids.dk/epidendroideae/tribe-gastrodieae/subtribe-nervilliinae/nervilia]]
[[Burleigh Park Orchids|http://www.speciesorchids.com/nerviliaCare_article.html]]





























































!Allmänt och utbredning
De är ett nya världen släkte bestående av <$view field="count"/> epifytisk och litofytiska arter, och växer från Mexiko till det södra av Anderna. Den största ansamlingen av arter förekommer i molnskogarna längs Andernas högland från Venezuela till Peru.
//Masdevallia// är döpt efter Jose Masdeval, en läkare vid Charles III av Spaniens hov, som hjälpte till att organisera Ruiz och Pavón´s botaniska expiditioner.

!Utseende
Släktet består av små till medium stora epifyter eller litofyter, med krypande rhizom. De har inga pseudobulber, utan en kort, upprätt underjordisk stam, ramicaul. Från denna underjordiska stam kommer de släta, köttiga bladen ett och ett vilka tillsammans bildar en tuva.
Till skillnad från de flesta andra orkidéer är petalerna små och sepalerna färgstarka, vanligen konformade med långa spetsar och mycket stora i förhållande till de andra segmenten av blomman. De flesta arterna blommar under vintern och våren.

!Skötsel
Släktet som helhet är kall- till svalväxande och trivs bäst i kruka med en fin kompostmix. Vissa arter behöver en period med kalla nätter, nästan ned till nollgradigt.
De föredrar en ljus växtplats utan direkt solsken, med hög luftfuktighet och vattning hela året utan att övervattnas eller torka ut. Under varma och soliga perioder kan de behöva vattnas dagligen. Gödningen bör vara en fjärdedel av normal dos.
//Masdevallia// kan växa aktivt hela året utan viloperiod och kan därför blomma när som helst. Vår och sommar är emellertid den huvudsakliga tillväxtperioden, med blomning under vintern och tidig vår.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Epidendreae
''Undertribus'': Pleurothallidinae

''Typart''
//[[Mas. uniflora|9ad1f8b8-f198-4ce1-9b63-719c9ff80875]]// Ruiz & Pavon (1798)

''Uttal''
mas-de-VAL-lee-a

''Synonymer''
__Heterotypic Synonyms:__
//Rodrigoa// Braas (1979)
//Portillia// Königer (1996)
//Jostia// Luer (2000)
//Acinopetala// Luer (2006)
//Alaticaulia// Luer (2006)
//Buccella// Luer (2006)
//Byrsella// Luer (2006)
//Fissia// Luer (2006)
//Luzama// Luer (2006)
//Megema// Luer (2006)
//Petalodon// Luer (2006)
//Regalia// Luer (2006)
//Reichantha// Luer (2006)
//Spectaculum// Luer (2006)
//Spilotantha// Luer (2006)
//Streptoura// Luer (2006)
//Triotosiphon// Schltr. (2006)
//Zahleria// Luer (2006)

!Rekommenderad läsning
[[Orchids of the Pleurothallid Alliance|http://www.pleurothallids.com/masdevallia.htm]]
[[Peripatus|http://www.peripatus.gen.nz/Taxa/Spermatophyta/Masdevallia.html]]
[[The Canadian Orchid Congress|http://www.canadianorchidcongress.ca/culture/masdeval.html]]
[[OrchidSafari|http://www.orchidtrek.com/pleuro/pleuro.html]]
[[OrchidSafari forum|http://www.geocities.com/~marylois/archiv73.html]]
[[Wikipedia|http://en.wikipedia.org/wiki/Masdevallia]]
[[Hillsview Gardens|http://hillsviewgardens.com/masd_drac_culture.html]]
[[Akatsuka Orchid Garden|http://www.akatsukaorchid.com/Shared/Care%20Sheets/Masdevallia.pdf]]






























!Allmänt och utbredning
Dess habitat är inte allmänt känt men den tros växa runt 1200 meters höjd, högt uppe på trädstammar och grova grenar i fuktiga bergsskogar i Ecuador, Peru och Bolivia. 
Mellan 1961 och 1989 samlades massor av plantor av //[[Psychp. versteegiana|32f7cd3a-574d-41c2-8e9d-02896d575c72]]// in som felaktigt såldes som //Psychp. sanderae//. Den äkta //Psychp. sanderae// återupptäcktes 1989 i regionen Junin, Peru, men platsen där den hittades har sedermera förstörts.
Kromosomtalet är 2=38.

!Utseende
Den har ett sympodialt växtsätt och bildar tuvor, upptill 25 cm höga. De äggformade pseudobulberna blir upptill fem cm långa, fyra cm breda och tillplattade från sidorna, som om de blivit trampade på. Ytan på bulberna är fårad, som efter en skosula, och färgad i dova nyanser av purpur och mörkgrönt. Från toppen av bulben kommer ett ensamt, avlångt blad, runt 20 cm långt och fyra cm brett. Det är färgat i ljust grått och purpur med markeringar i ljusgrönt.
Den upptill fyra dm långa blomstängeln kommer under våren från basen av den senaste fullväxta bulben. Längs stängeln finns noder med fyra cm mellanrum. Varje lite svullen nod är täckt av ett tunnt, pergamentliknande täckblad, ett par cm långt. I toppen av stängeln kommer en blomma i taget, upptill fyra blommor i följd. Efter att den primära blomningen är över, bildar den vanligen en ny gren från en nod i toppen av den gamla stängeln och blommar vidare.
Blomman blir runt 15 gånger fem cm stor. Spetsarna på petalerna och den dorsala sepalen är mörkt rödbruna som övergår i ljust brunt mot mitten av blomman. De laterala sepalerna är klargula med mindre fläckar i rödbrunt. Läppen är gröngul med en mångfald klart avgränsade röd fläckar och prickar. Sepalernas "horn" är ljust gulgröna med mörkt rödbruna spetsar. Den mörkbruna könspelaren är kantad med bruna fransar.
Den kan även bilda keikis från en nod i toppen av blomstängeln.

!Skötsel
Från sitt naturliga habitat är växten van vid kraftiga regn året om, men rötterna torka snabbt ut igen. Vattna ofta med en fjärdedel till halva den rekommenderade dosen gödning, men låt komposten torka ut mellan vattningarna, komposten får inte vara helt blöt någon längre tid. Vattningen kan minskas något på vintern, särskilt för plantor som odlas under de mörka, korta dagar vid tempererade breddgrader. De bör dock inte torka ut eller vara torr under långa perioder. Om vattningen reduceras bör gödslingen också minskas för att förhindra att salter byggs upp i komposten.
Ge dem en växtplats i ljus halvskugga, runt 18000 till 25000 lux. Plantorna kan tolerera högre ljusintensitet om luftfuktigheten och -cirkulationen är hög.
I dess naturliga habitat under året ligger dagstemperaturen runt 25 grader, och nattetid ner mot 14 grader. Under vintern kryper temperaturen ner ytterligare ett par tre grader.
De kan monteras på trädormbunke eller korkplattor om luftfuktigheten är tillräckligt hög och de vattnas minst en gång dagligen under sommaren. Monterade växter kan behöva flera vattningarna per dag under mycket varmt och torrt väder. Många odlare har svårt att hålla monterade plantor tillräckligt fuktiga, och föredrar att odla dem i grunda krukor eller korgar med en öppen, väldränerad kompostmix med en stor andel hackad sphagnum eller perlit. Träkol tillsätts ofta för att hjälpa till att hålla mediet öppet och förhindra att den bli sur. Använd små krukor bara stora nog att rymma rötterna. Omplanteringen bör endast göras när det är nödvändigt, och då bara när ny rottillväxt börjar synas så att plantan störs så lite som möjligt. Som med de andra arterna i släktet, trivs de ypperligt i en trådkorg kantad med kokosfiber och fylld med en blandning av fin- och medelgrov kompost med trädormbunke blandad med cirka en tiondel perlit och en tiondel kol.

!Synonymer
__Homotypic Synonyms:__
//Oncidium sanderae// Rolfe (1910)

!Rekommenderad läsning
[[Orchid Species Culture|http://www.orchidculture.com/COD/FREE/FS1280.html]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/psysanderae.htm]]
































































































































































































































!Allmänt och utbredning
Arten kommer från de låglänta delarna av delstaten Assam i nordöstra Indien, Myanmar/Burma och Thailand.
Namnet kommer från latinets ''obesus'' som betyder "fet" och anspelar på de tjocka pseudobulberna.

!Utseende
Den bildar täta klungor med korta, knubbiga pseudobulber som bär fyra eller fem långsmala blad från toppen. Hela plantan blir som störst 15 cm stor. Bulberna är silvergröna med längsgående purpurfärgade ränder och vid basen omslutna av tunna täckblad. Den fäller bladen under vintern innan blomstänglarna kommer under januari eller februari. Varje blomstängel bär upptill fem stycken svagt doftande blommor, mindre än två cm stora, vanligen gnistrande vita eller ljust gula sepaler och petaler, och en rosa läpp med ränder i purpur.

!Skötsel
Ge den varma växtförhållanden och låt komposten torka upp mellan vattningarna men ge den jämn vattning hela året, den har ingen viloperiod. Försök hålla luftfuktigheten hög med god luftcirkulation. Om den trivs kan den bilda flera nya bulber varje år och blir snart en stor planta, till omfång om inte i höjd.

!Synonymer
__Homotypic Synonyms:__
//Eria obesa// Lindl. (1830)
//Trias obesa// Mason (1860)
//Hymeneria obesa// M.A.Clem. & D.L.Jones (2002)
__Heterotypic Synonyms:__
//Eria lindleyana// Griff. (1851) nom. illeg.
//Eria prainii// Briq. (1900)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/eriaobesa.htm]] 2014-12-14
[[Butterflys and Orchids Gallery|http://www.orchidfoto.com/thumbnails.php?album=492]] 2014-12-15







































































































!Allmänt och utbredning
Det är ett primitivt släkte med <$view field="count"/> arter som växer terrestriskt i skuggiga, fuktiga låglandsskogar från havsnivå till cirka 1300 m höjd, ofta i lera eller lera med mycket lövkompost i tropiska delar av Kina, Sydostasien och på vissa Stillahavsöar.
Liksom släktet //[[Apostasia|09fd104d-7cc0-4074-8c3c-0443f8a89c59]]// i samma underfamilj har den vissa primitiva egenskaper som gör att det anses kunna vara ursprunget till Orchidaceae. En definierande egenskap för detta släkte är att den har tre fertila ståndare i stället för endast en som är fallet med de flesta andra orkidéer, och att deras puderliknande pollen inte utvecklats till pollinier.
Släktet namngavs av Carl Ludwig von Blume för att hedra upptäcktsresande, naturhistorikern och prins [[Maximilian zu Wied-Neuwied|https://sv.wikipedia.org/wiki/Maximilian_zu_Wied-Neuwied]] (1782-1859). Kromosomtalet är 2n=48, mycket små kromosomer, möjligen tetraploid.

!Utseende
Dessa primitiva orkidéer är håriga, höga örter utan rhizom. De får långa, tunna, längdveckade blad i spiral längs en central stam. De producerar en ogrenad, upprätt blomstängel, oftast med ett 30-tal vita eller gula blommor i en tät blomställning. Sepaler och petaler är en halv till två cm långa, korta, smala, nästan lika. Läppen är lik sepaler och petaler men lite större och bredare och med en upphöjd mittnerv på ovansidan. Frukten är skaftad, mer eller mindre ovala, antingen en torr kapsel eller ett bär.

!Skötsel
Arter av //Neuwiedia// frodas under förhållanden med hög luftfuktighet och djup skugga och är typiska skogsväxter. De kan hittas från havsnivå till en höjd av omkring 1300 m, men förekommer mest på lägre höjder, upp till 800 meter i bergen.
Alla arter är sällsynta, ingen återfinns i odling, och en del är kända bara från ett fåtal gamla herbariumsamlingar. Det verkar inte vara möjligt att föröka dem utom från frö.

!Taxonomi
''Underfamilj'': Apostasioideae ''Tribus'': N/A ''Undertribus'': N/A

----
''Typart''
//[[Neu. veratrifolia|31d34e3b-d26a-4ca4-8440-a2c1a8ebf35b]]// Blume (1834)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|https://en.wikipedia.org/wiki/Neuwiedia]] 2015-11-18

























































































!Allmänt och utbredning
Det är en liten terrestrisk eller litofytisk art från provinsen Assam i nordöstra Indien, Bhutan, Myanmar/Burma och den kinesiska provinsen Yunnan där den växer skuggad av långa gräs i mossan i sprickor av branta kalkstensklippor nära rinnande vatten mellan 300 till 1550 meters höjd.
Arten är uppkallad efter den brittiske officeren Herbert Spicer, Godalming i Surrey, England, som tjänstgjorde i 1800-talets Indien, och i vars växthus arten blommade första gången i Europa. Den intressanta historien om dess upptäckt är dokumenteras i Arthur Swinsons berömda bok "Frederick Sander, The Orchid King". Taxonomiskt tillhör den undersläkte Paphiopedilum sektion Thiopetalum. Kromosomtalet är 2n=30.

!Utseende
Den bildar fyra eller fem avlånga, klargröna blad som blir mellan 15 och 30 cm långa och tre till sex cm breda. Från oktober under hösten hela vintern till januari kan plantan bilda en 20 till 40 cm lång, upprätt blomstängel som bär en ensam, eller mer sällan två, blommor. Blommorna kan hålla två till tre månader och en stor planta med fem eller fler skott kan ha flera samtidiga blommor. Blommorna blir fem till sju cm stora koppargröna blommor. Den dorsal sepal är vit med en tydlig purpurfärgad mittlinje och med en klargrön fläck mot basen. Petalerna är grönaktiga, även de med en tydlig purpurfärgad mittlinje, läppen är ljusgrön med en tydlig vit och purpur staminoid.

!Skötsel
Den växer svalt till varm i skugga, 8000 till 16000 lux, utan någon vintervila. Nattetid under vintern kan temperaturen falla till fyra grader i dess naturliga utbredningsområde, och under sommaren stiga till över 30 grader. Under vintern när dagarna är korta kan den klara mer ljus. Den tillväxer fort och bildar snabbt en rejäl praktplanta.
När knopparna börjar framträda som en rödbrun knopp djupt nere mellan bladen, håll plantan jämnt fuktig tills den blommat klart, låt den inte helt torka ut mellan vattningarna. Minska ljuset och försöka hålla den lite svalare på natten. Ju långsammare blomstängeln växer, desto starkare blir den och desto större kan blommorna bli. Eftersom den växer på kalkstensklippor är den inte känslig för salter i vattnet och vanligt kommunalt vatten med ett pH under 7,8 är inga problem.
Plantera om minst vartannat år på våren när de nya skotten börjar synas, mars till juni. Ge den en väldränerad mix av medelgrov barkkompost och perlite eller sphagnum med en tillsats av kalk.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium spicerianum// Rchb.f. (1880)
//Cordula spiceriana// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium spicerianum leodiense// Pynaert (1894)
//Paphiopedilum spicerianum// f. //immaculatum// Braem (1999)
//Paphiopedilum spicerianum// f. //burkhardii// O.Gruss & Roeth (2010)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphspicerianum.htm]] 2015-08-24
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_spicerianum]] 2015-08-24
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/paphiopedilum/spicerianum/index.html]] 2015-08-24
[[Orchid Plant Care|http://www.orchidplantcare.info/easy-orchid-plant-paphiopedilum-spicerianum/]] 2015-08-24
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-spicerianum.html]] 205-08-24

;Greig Russell, 2008
:Paphiopedilum spicerianum//: unravelling some of the mystery//, McAllen International Orchid Society Journal, Vol. 9(4), pp. 2-11
:http://miosjournal.org/journal/2008/04/PaphiopedilumSpicerianum.html, 2015-08-24




!Allmänt och utbredning
Arten förekommer som en varmväxande miniatyrepifyt i Myanmar, Indien och Thailand på mossklädda träd hängande över floder under 500 meters höjd.

!Utseende
Det är en epifytisk planta med många, långa, köttiga rötter. Den har en väldigt kort stam och ovala, tjocka blad.
De blommar under våren på en lång hängande blomstängel, med upptill ett halvdussin blommor som öppnas samtidigt. Sepaler och petaler är mjölkvita. Läppen är purpurfärgad med den mittersta av de tre flikarna purpurpickig, medan de laterala flickarna är fläckade i gult. Basen av könspelaren är brunprickig.

!Skötsel
De växer i varma och fuktiga miljöer, på mossbeklädda trädgrenar över floder. I områden där det förekommer torka fäller den sina blad under vintern. Bara i gynnsamma och skyddade områden behåller den sina blad under torrperioden. I odling behåller den bladen om mossan runt rötterna hålls fuktig under viloperioden.
För att få den att blomma ordentligt måste den väckas så tidigt som möjligt, för att sätta igång bladtillväxten. Arten kräver också mer ljus än andra phalanopsisar.

!Synonymer
__Homotypic Synonyms:__
//Grafia parishii// A.D.Hawkes (1966)
//Polychilos parishii// Shim (1982)
//Doritis parishii// T.Yukawa & K.Kita (2005)
__Heterotypic Synonyms:__
//Aerides decumbens// Griffith (1851)
//Kingiella decumbens// Rolfe (1917)
//Biermannia decumbens// Tang & F.T.Wang (1945)
//Phalaenopsis decumbens// Holttum (1947)
//Kingidium decumbens// P.F.Hunt (1970)
//Polychilos decumbens// Shim (1982)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phalparishii.htm]]
[[Especes de Phalaenopsis|http://perso.wanadoo.fr/bernard.lagrelle/Parishii/anglais/Phalaenopsis%20parishii%20anglais.htm]] spansk sida på engelska








































































































!Allmänt och utbredning
Arten är endemisk för Brasiliens västra delstater där den växer epifytiskt från havsnivå upptill 1200 meters höjd längs Atlantens kust.
Namnet kommer från latinets ''luna'' som betyder "måne" och anspelar på den halvmånformade läppen

!Utseende
Det är en liten till medelstor planta utan pseudobulber, utan med avlånga, ogrenade, tio till 30 cm långa stammar som kommer från ett underjordiskt rhizom. De trekantiga, centimeterstora bladen kommer alternerande i två rader längs hela stammen vilket ger den ett säreget utseende även när den inte är i blom. De klargula blommorna kommer på korta, grenade blomstänglar under våren och sommaren från toppen av stammen. Varje stängel kan bära flera stycken två cm stora blommor som håller under flera veckor.

!Skötsel
Den växer i intermediära till varma temperaturer i halvskugga till ljust utan direkt solljus. Håll den lätt fuktig hela tiden och göd ofta med svag gödning under tillväxtperioden, vattna minst en gång i veckan så fort komposten börjar torka upp. Under vintern kan det få gå lite längre mellan vattningarna så den torkar upp en aning.
Odla i medelgrov barkkompost.

!Synonymer
__Homotypic Synonyms:__
//Fernandezia lunifera// Lindl. (1839)
__Heterotypic Synonyms:__
//Fernandezia robusta// Rchb.f. (1864)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/locklunifera.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Lockhartia_lunifera]]








!Allmänt och utbredning
Det är en mycket sällsynt art som är endemisk för kommunen Rizal nära berget Brooke Point på Filippinernas största ö Palawan där den växer terrestriskt i fickor med lövkompost på kalkstensklippor i fuktiga subtropisk eller tropiska låglandsskogar mellan 500 och 900 meters höjd över havet. Även om hela ön är ett skyddat område är arten akut hotad då skogen fortfarande är utsatt för mänsklig störning som kalhuggning, svedjebruk och utbyggnad av bostadsområden. Arten är överinsamlad av lokala entusiaster på grund av den höga efterfrågan både på den lokala och internationella marknaden.
Namnet kommer för att hedra den numera bortgångne amerikanske orkidéentusiasten dr. Jack Fowlie, tidigare redaktör för tidningen "Orchid Digest". Taxonomiskt tillhör den undersläkte Sigmatopetalum sektion Barbata undersektion Barbata. Kromosomtalet är 2n=36.

!Utseende
Arten liknar //[[Paph. acmodontum|44ac2c5c-f92c-4829-b06a-c2545dd05a82]]//, //[[Paph. urbanianum|a045f2db-f0f6-4815-baea-63f6a27a3a36]]// och //[[Paph. argus|0685359d-b27d-4aa3-bd8f-7260c0f72ce5]]// men bladen är grågrön och den har mindre blommor. Den får fyra till sex stycken drygt 14 cm långa och två till fyra cm breda blad med svaga markeringar i ljust grönt. Under vår och sommar kommer en upptill 25 cm lång blomstängel som bär en ensam blomma, sju cm stor. Sepalerna är vita med nerver i grönt och purpur. Petalerna är vita med anstrykningar av purpur mot spetsarna med nerver i grönt med svarta prickar längs kanterna och i mitten. Läppen är ljusbrun till grönaktig med anstrykning av purpur.

!Skötsel
Ge den ljus skugga utan direkt sol, ungefär 20000 lux, intermediära eller varma temperaturer, vintertid inte under 15 grader, och jämn vattning året runt. Trots att de växer på utsatta positioner, utsätts de sällan för direkt solljus. Området där den naturligt växer utsätts för kraftiga skyfall under sommar och hösten, sporadiska regn under våren mellan januari till april, och kraftiga regn under vintern. Ge generöst med vatten varannan eller var tredje dag, och svag gödning två eller tre gånger i månaden.
Odla i en öppen väldränerad kompostmix av medelgrov bark med tillsats av kalk, leca och perlite, sphagnum eller fibrer av trädormbunke.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum hennisianum// var. //fowliei// P.J.Cribb (1987)
__Heterotypic Synonyms:__
//Paphiopedilum fowliei// var. //sangianum// Braem (1993)
//Paphiopedilum fowliei// f. //christianae// Braem (1998)
//Paphiopedilum fowliei// f. //sangianum// O.Gruss & Roeth (1999)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphfowliei.htm]] 2015-05-07
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_fowliei]] 2015-05-07
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/sigmatopetalum/fowliei/index.html]] 2015-05-07
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-fowliei.html]] 2015-05-07




















!Allmänt och utbredning
Arten förekommer terrestriskt i södra Indien, östra Himalaya, Laos, Thailand och den malaysiska övärlden runt 1700 meters höjd.
Kromosomtalet är 2n=54.
Namnet anspelar på bladens trattformade utseende.

!Utseende
Denna miniatyrart får vita, underjordiska pseudobulber, lätt tillplattade, i form och storlek som en böna. Från bulben kommer under våren en sju till elva cm lång, smal stam med två noder och ett stort, runt, hjärtformat blad. Bladets ovansida är mörkgrönt med fem till nio purpurfärgade ränder som strålar ut från basen av bladet, undersidan är ljusgrönt. Inifrån bladets trattformade bas kommer under senvår eller tidig sommar, vanligen juni till juli, en upptill 15 cm lång, upprätt blomstängel som bär en ensam blomma. Blomman är tre cm stor i grönt purpur. Läppen är bred och ljust rosa eller purpur.

!Skötsel
I naturen blir bulberna helt inaktiva under de torra vintermånaderna och i odling behöver de en sval, nästan helt torr viloperiod under flera månader, från det att bladen har vissnat ner på hösten tills dess de nya skotten kommer på våren. Om möjligt bör de planteras om varje vår innan de nya bladen kommer. Plantera bulberna två och en halv cm under ytan på en näringsrik mix av halvmultnad lövkompost och grovt grus eller leca som dränering. Använd djupa krukor eller skålar som ger gott om utrymme för nya bulber att bildas från stammens utskott.
Ge den en skuggig eller halvskuggig växtplats, samma som för [[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]], med rejält med vatten och gödning under tillväxtperioden för att sedan minska och upphöra under senhösten när bladen vissnar ner.

!Synonymer
__Heterotypic Synonyms:__
//Nervilia hallbergii// Blatt. & McCann (1932)
//Nervilia calcicola// Kerr (1933)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/nerinfundibubifolia.htm]]
[[Flowers of India|http://www.flowersofindia.net/catalog/slides/Funnel-Leaf%20Nervilia.html]]


































































































































































































!Allmänt och utbredning
Det är en medelstor terrestrisk art som även kan påträffas litofytiskt eller epifytiskt i halvmultnad lövkompost eller mossa i sprickor på branta granitklippor i fuktiga skogar eller nära flodraviner mellan 300 och 2000 meters höjd över havet. I naturen har den ett stort utbredningsområde från ön Hainan i södra Kina genom Vietnam, Laos, Kambodja och östra kanten av Thailand. Arten används gärna i hybridisering för sina rosa kronblad, långa stjälkar och för att den är så lätt att odla. Det finns även en alba form av denna art.
Den är uppkallad efter den engelske 1800-tals orkidéntusiasten W.M. Appleton, som var först att blomma arten i Europa.

!Utseende
Det är en kompakt planta med sju eller åtta stycken 20 cm långa och upptill fyra cm breda, ljusgröna blad, brokiga med markeringar i mörkgrönt som ofta övergår i purpur mot basen av bladen. Den får en lång, smal, upprätt blomstjälk som är lila i färgen och täckt med vit ludd. Stjälken kan bli närmare halvmetern lång och bär en, eller väldigt sällan två, hållbara, tio cm stora blommor. Den blommar i det vilda mellan mars och maj.
Dorsala sepalen och synsepalen är grön eller vitaktigt grön med gröna nerver. Läppen är hjälmformad i gulgrönt och rött. Den dorsala sepalen har brun-lila ränder mot basen, petalerna är grönaktiga med svarta vårtor mot basen och övergår till rosa-röd eller matt rosa mot spetsen, med mörkbruna prickar eller strimmor. Ofta är petalerna halvvridna.
Håll plantan i skugga när blommorna kommer för att behålla färgen.

!Skötsel
Eftersom den i naturen har ett ganska stort utbredningsområde i höjdled, från 300 till 2000 meter över havet, kan den klara både svala som lite varmare temperaturer. Inte under åtta grader och inte alltför mycket över 20 är bäst. Gärna lite halvskuggigt, men den mår inte illa av lite extra tillskottsljus under vintermånaderna. Det viktigast är att hålla den fuktig utan att låta den torka ut för mycket mellan vattningarna. April till oktober är de våta månaderna i dess naturliga habitat.
Plantera i en öppen, väldränerande kompost av medelgrov barkkompost uppblandad med perlite och lavasten eller lecakulor.
För att öka chansen för blomning, minska vatteningen och temperatur under en kort tid på vintern.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium appletonianum// Gower (1893)
//Cypripedium bullenianum// var. //appletonianum// Rolfe (1893)
//Cordula appletoniana// Rolfe (1912)
//Paphiopedilum hookerae// subsp. //appletonianum// M.W.Wood (1977)
__Heterotypic Synonyms:__
//Cypripedium wolterianum// Kraenzl. (1895)
//Paphiopedilum wolterianum// Pfitzer (1903)
//Paphiopedilum hainanense// Fowlie (1987)
//Paphiopedilum appletonianum// var. //immaculatum// Braem (1988)
//Paphiopedilum appletonianum// f. //immaculatum// Braem (1998)
//Paphiopedilum robinsonii// f. //viride// Braem (1998)
//Paphiopedilum appletonianum// var. //hainanense// Braem, C.O.Baker & M.L.Baker (1999)
//Paphiopedilum cerveranum// Braem (1999)
//Paphiopedilum cerveranum// f. //viride// Braem (1999)
//Paphiopedilum appletonianum// f. //album// Asher (2000)
//Paphiopedilum tridentatum// S.C.Chen & Z.J.Liu (2001)
//Paphiopedilum angustifolium// R.F.Guo & Z.J.Liu (2002)
//Paphiopedilum puberulum// S.P.Lei & J.Yong Zhang (2002)
//Paphiopedilum appletonianum// f. //tridentatum// Aver. (2006)
//Paphiopedilum appletonianum// var. //cerveranum// O.Gruss & Roellke (2007)
//Paphiopedilum appletonianum// f. //viride// O.Gruss & Roellke (2007)
//Paphiopedilum appletonianum// var. //tridentatum// S.C.Chen & Z.J.Liu (2009)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphappletonianum.htm]]
[[Orchid Karma|http://www.orchidkarma.com/tag/paphiopedilum-appletonianum/]]
[[Orchid Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_appletonianum]]












!Allmänt och utbredning
Det är en medelstor art från Borneo, Sumatra, Sulawesi och den malaysiska övärlden som växer terrestriskt i sur lövkompost på fuktiga branter och mosstäckta sandstensklippor i mangroveskogar från havsnivå upptill 1850 meters höjd men vanligen återfinns den under 900 meter.
Det finns två accepterade underarter; //Paph. bullenianum// var. //bullenianum// som har ett kromsomtal på 2n=40 och //Paph. bullenianum// var. //celebesense// P.J.Cribb (1987) vars kromosomtal är 2n=42.
Namnet kommer för att hedra den engelske 1800-tals orkidéodlaren Bullen som arbetade för den franska firman Messrs. Low & Co.

!Utseende
Den får avlångt sex till åtta elliptiska blad upptill 14 cm långa och fyra cm breda, mönstrade i mörkgrönt på ljust blågrön botten. Bladen har en karaktäristisk röd undersida. Under vår eller sommar kommer en upptill halvmeterlång blomstängel som bär en ensam, drygt åtta cm stor, blomma högt över bladen. Den dorsala sepalen är grönaktig med rosa petaler och en bronsfärgad eller rosa läpp.

!Skötsel
Det är en varmväxande art som föredrar om temperaturen inte går under 16 grader, och växer bäst i en ljus skugga med morgonsol. Om plantan hålls skuggigt under blomningen kommer den få klarare färger.
På södra halvklotet är juli och augusti är de torraste och svalaste månaderna i dess naturliga habitat, och oktober till januari de våtaste. Våren är varm och fuktig.
Vattna ordentligt under tillväxten, låt inte plantan torka ut helt. För att initiera blomning behövs en kort period med reducerad vattning och temperatur under viloperioden.
Komposten som bör vara öppen och väldränerad behöver hålla ett pH mellan fyra och fem för en optimal tillväxt.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium bullenianum// Rchb.f. (1865)
//Paphiopedilum hookerae// var. //bullenianum// Kerch. (1894)
//Cordula bulleniana// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphbullenianum.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_bullenianum]]


































































!Allmänt och utbredning
//Paph. concolor// [paf-ee-oh-PED-ih-lum KON-kol-or] återfinns terrestriskt eller litofytiskt i kustnära kalkklippors skrevor och mossa eller halvförmultnad lövkompost i ständigtgröna skogar längs vattendrag i Myanmar/Burma, Thailand, Laos, Kambodja, sydvästra Kina (Yunnan, Guizhou, Guangxi) och norra Vietnam från havsnivå till 1700 meters höjd.
Artnamnet kommer från latinets ''con-color'' som betyder "samma färg" och anspelar på blommans enhetliga bakgrundsfärg. I Kina heter den ''Tong Se Dou Lan'', i Thailand ''Rongthao nari lueang prachin'' och i Sverige "Elfenbensfärgad venussko".
Arten har ett större utbredningsområde än någon annan art i släktet och därför är den variabel i både utseendet av blad och blomma och många varianter har beskrivits men bara två är accepterade av ''World checklist of selected plant families'' Royal Botanic Gardens, Kew., //Paph. concolor// var. //concolor// och //Paph. concolor// var. //longipetalum// Pfitzer (1903) som har avlånga sepaler.

!Utseende
Det är en kompakt liten planta som sällan blir större än 20 cm och saknar pseudobulber utan får fyra till sex stycken tre cm breda och 15 cm långa elliptiska blad från en mycket kort stam. Bladen är mörkgröna med tydliga, grågröna markeringar på ovansidan och ljusgröna med purpurprickar på undersidan. Under vår eller höst kommer en tio cm lång, upprätt, mörkbrun, tätt hårbeklädd blomstängel som vanligen bär en ensam blomma men ibland upptill tre stycken. Den sju cm stora blomman är ljusgul, översållad med små purpurfärgade prickar, och med en angenäm doft av äpple. Med lite tur kan blomman hålla mer än två månader.

!Skötsel
Den vill ha en varm och fuktig växtplats i skugga. I sitt naturliga habitat utsätts den för en torr och dimmig vinter och regnvåt sommar och höst. Från november till maj är den torra perioden och juni till september de riktigt blöta månaderna.
Eftersom den saknar vattenhållande bulber bör komposten inte tillåtas torka ut, den behöver vattnas minst två gånger i veckan. Efter blomningen bör vattningen reduceras under fyra veckor, men komposten får inte torka ut helt. Göd gärna med en svag, kväverik gödning en gång i månaden, halva den rekommenderade dosen. Arten är känslig för uppbyggnad av salter i komposten så plantera om ofta och skölj igenom komposten regelbundet. Plantera i en väldränerad kompost av medelgrov barkkompost och en hög andel perlite eller sphagnum med inblandad kalksten.
Under vintern behöver den en period med temperaturer ner mot tio grader. Lite extra ljus under vintern inducerar knoppbildningen men blomman får klarare färger om knoppen hålls i skugga.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium concolor// Lindl. (1865)
//Cordula concolor// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphiconcolor.htm]] 2014-11-28
[[Wikipedia|http://en.wikipedia.org/wiki/Paphiopedilum_concolor]] 2014-11-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_concolor]] 2014-11-28
[[Plant of the Week|http://www.plantoftheweek.org/week105.shtml]] 2014-11-28
[[Slipperorchids|http://www.slipperorchids.info/paphdatasheets/brachypetalum/concolor/index.html]] 2014-11-28
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242335738]] 2014-11-28
[[Pahs.net|http://paphs.net/media/Paphs/concolor.htm]] 2014-11-28

























!Allmänt och utbredning
Det är förmodligen den restrepia-art som har störst utbredningsområde och påträffas både epifytiskt och litofytiskt i fuktiga molnskogar från Chiapas, i södra México, genom Centralamerika ner till Anderna i Colombia, Peru och Ecuador mellan 300 och 3200 meters höjd.
Namnet kommer från latinets ''tricho'' som betyder "hår" och ''glossus'' som betyder "tunga", "hårig tunga" alltså, som anspelar på läppens ludna utseende.

!Utseende
Det är en minsting inom släktet med sina maximala 15 cm som bildar en tät klump. Den saknar pseudobulb utan den två till nio cm långa bladstjälken kommer direkt från en underjordisk stam. Basen av bladstjälken är omsluten av fyra till åtta stora, tunna, benvita täckblad vars nederdel ibland är svartprickiga. I toppen av stjälken kommer ett ensamt, elliptiskt blad som blir tre till sex cm långa och en och en halv till tre cm breda och som ofta är lilafärgad på undersidan. Mellan juni och september kan plantan producera en fem cm lång blomstängel som håller en ensam, långsmal blomma över bladskivan. den variabla blomman blir tre cm stor och knappt en cm bred med en klargul eller orange grundfärg och ränder eller prickar i lila eller mörkrött. Efter en vecka är blomprakten över och sex till elva veckor efter pollinering kan en mogen frökapsel vara färdigbildad.

!Skötsel
Håll plantan i ljus skugga eller halvskugga, mellan 10000 och 15000 lux. Eftersom den har så stort utbredningsområde kan den tolerera lite större temperaturintervall än många av sina släktingar, mellan fyra till 29 grader, men den föredrar en lägsta nattemperatur på elva grader och dagtemperaturen upptill 24.
Plantera i en mix av fin barkkompost och perlite eller hackad sphagnum eller i ren sphagnum. Vattna regelbundet och håll komposten fuktig. Den verkar vara lätt odlad och bildar lätt keikis.

!Synonymer
__Heterotypic Synonyms:__
//Restrepia leontoglossa// Schlechter (1920)
//Restrepia serrilabia// Schlechter (1920)
//Restrepia angustilabia// Schlechter (1923)
//Restrepia subserrata// Schlechter (1923)
//Restrepia filamentosa// Ames & C.Schweinf. (1925)
//Restrepia lankesteri// Ames & C.Schweinf. (1930)
//Pleurothallis amesiana// L.O.Williams (1940)
//Pleurothallis filamentosa// L.O.Williams (1940)
//Pleurothallis subserrata// L.O.Williams (1940)
//Restrepia angustilabia// subsp. //subserrata// H.Mohr (1996)
//Restrepia antennifera// subsp. //leontoglossa// H.Mohr (1996)
//Restrepia brachypus// subsp. //serrilabia// H.Mohr (1996)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/restrichoglossa.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_trichoglossa]]






























!Allmänt och utbredning
Arten växer litofytiskt på kalkstensklippor och terrestriskt i regnskogarnas lövkompost i bergskedjan i den södra delen av provinsen Phang Nga, Thailand, mellan 350 till 450 meters höjd över havet. Den är mycket sällsynt i naturen, känd endast från en lokal med mindre än 50 vuxna individer.
Namnet kommer helt enkelt efter det faktum att den är endemisk för Thailand. Möjligen är den en variant av //[[Paph. niveum|ad3d7567-ba3b-4018-9896-3ed9cd970231]]// som den är mycket lik men med mindre blommor och blad, och med lila prickar på petalerna och insidan av läppen. Taxonomiskt tillhör den undersläkte Brachypetalum.

!Utseende
Det är en liten art som bildar tre till fem avlångt runda blad, med ovansidan mönstrade i ljust och mycket mörkt grönt. Undersidan är kraftigt lilafärgad. Bladen blir fyra till tio cm långa och en till tre cm breda. Under april till maj kommer en kort, sex till 17 cm lång, blomstängel som bär en eller två stycken fyra cm stora blommor. Sepaler, petaler och läpp är helt vita, med små lila prickar mot basen av petalerna. På insidan av läppen finns flera lila fläckar som syns igenom. Staminoiden är klart gröngul och lyser i den i övrigt vita blomman.

!Skötsel
I sitt naturliga utbredningsområde utsätts den för en kall vinter och vår med endast kraftig dimma och lätta duggregn. Under sommar och höst förser kraftiga regn plantan med en ständig, jämn fuktighet. Ge den en ljus växtplats med varm temperatur, vintertid inte under 16 grader. Sommartid kan temperaturen gå över 30 grader utan fara. Odla i en väldränerad mix med medelgrov barkkompost och perlit. Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattning under vintern för att inducera blomning. Tillväxten kan stimuleras genom att hålla plantan varmt.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphthaianum.htm]] 2015-08-28
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_thaianum]] 2015-08-28
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/brachypetalum/thaianum/index.html]] 2015-08-28
[[Dr. Tanaka's Home Page|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/enshinshu49.html]] 2015-08-28

















































































!Allmänt och utbredning
Denna epifytiska art från de tropiska delarna av skogar är också vanlig i kaffe- och kakaoodlingar från havsnivå upp till 700 meters höjd.
<$reveal type="nomatch" state="$:/temp/state-e679f2c3-964a-4332-9074-5b6ebe61a8f1" text="show">
<$button set="$:/temp/state-e679f2c3-964a-4332-9074-5b6ebe61a8f1" setTo="show">visa mer info</$button></$reveal>
<$reveal type="match" state="$:/temp/state-e679f2c3-964a-4332-9074-5b6ebe61a8f1" text="show">
Har påträffats i Benin, Ghana, Guinea-Bissau, Guinea, Republiken Elfenbenskusten, Liberia, Nigeria, Senegal, Sierra Leone, Togo, Centralafrikanska republiken, Republiken Kamerun, Gabon

<$button set="$:/temp/state-e679f2c3-964a-4332-9074-5b6ebe61a8f1" setTo="hide">dölj</$button>
</$reveal>

!Utseende
Denna kompakta lilla planta saknar pseudobulber utan får en tjock, träaktig stam som sällan blir större än 20 cm hög med fyra till tolv köttiga, läderartade blad, upptill 18 cm långa och sex cm breda med en tudelad spets. När plantan är ung är bladen rent mörkgröna men när plantan åldras får de normalt mörka prickar och fläckar. Under vår eller sommar kommer från toppen av stammen en upptill 40 cm lång blomstängel som kan bära så många som 20 vaxartade, speciellt nattetid doftande, blommor. De två till fyra cm stora, stjärnformade blommorna är vita med en rosa eller brun anstrykning längs den upptill sex cm långa sporren. Blommorna kan hålla åtta veckor men doften försvinner efter fyra. Nya plantor kan börja utvecklas från basen av stammen efter att den blommat första gången.

!Skötsel
Denna varmväxande art kräver hög luftfuktighet och kan odlas i kruka eller monterad under halvskugga. Bladen bränns lätt i för stark sol men trivs bra tillsammans med [[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]. Vid odling i kruka eller hängande korg rekommenderas en väldränerad mix av medelgrov barkkompost och sphagnum.
Vattna två gånger i veckan under sommaren och minska till en gång i veckan när temperaturen börjar sjunka på hösten. Under vintern behöver den en minsta temperatur runt 15 grader.

!Synonymer
__Homotypic Synonyms:__
//Angraecum bilobum// Lindl. (1840)
//Angorchis biloba// Kuntze (1891)
//Rhaphidorhynchus bilobus// Finet (1907)
__Heterotypic Synonyms:__
//Angraecum apiculatum// Hook. (1845)
//Angraecum campyloplectron// Rchb.f. (1855)
//Angorchis campyloplectron// Kuntze (1891)
//Aerangis campyloplectron// Garay (1972)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/aebilobax.htm]] 2014-11-19
[[Angraecums...|http://angraecums.blogspot.se/2012/04/aerangis-biloba.html]] 2014-11-19
[[Orchids Wiki|http://orchids.wikia.com/wiki/Aerangis_biloba]] 2014-11-19
[[Species Specific|http://www.species-specific.com/faqs/aerangis-biloba/]] 2014-11-19
[[Burleigh Park Orchids|http://www.speciesorchids.com/AERANGISBILOBA.html]] 2014-11-19






















!Allmänt och utbredning
//Paph. godefroyae// [paff-ee-oh-PEE-di-lum go-de-FRO-e] är en liten terrestrisk eller litofytisk art endemisk för södra Vietnam, Myanmar/Burma och Thailands övärld där den växer i lövkompost eller mossa i sprickorna på kustnära kalkstenssluttningar mot väster mindre än 30 meter över havet.
Den är uppkallad efter frun till den franska botanisten och trädgårdsodlare Alex Godefroy-Lebeuf (1852-1903) i vars växthus arten blommade för första gången i Europa 1883. Den liknar //[[Paph. bellatulum|f0f4e936-5ba6-41ee-9615-76ff61c16251]]// men läppen är större och blommorna mindre prickiga. Arten har två accepterade varianter, //Paph. godefroyae// var. //ang-thong// Braem och //Paph. godefroyae// var. //godefroyae//. Taxonomiskt tillhör den undersläktet Brachypetalum. Kromosomtalet är 2n=26.

!Utseende
Den får fyra till sex, långsmala, upptill 14 cm långa och tre cm breda blad med översidan marmorerade i mörkt och ljust grönt och undersidan översållad av purpurfärgade prickar. Arten är känd för sitt stora rotsystem, som lagrar vatten under torrperioden. Under sommar och höst kommer en drygt decimeterlång blomstängel som bär en eller två runda blommor. Blommorna är extremt variabla men blir mellan fyra och nio cm stora, med grundfärger från rent vitt till gulaktigt gräddvitt, täckta med stänk i purpurfärgade fläckar. Blommorna håller länge, mellan fyra till sex veckor.

!Skötsel
Dess naturliga utbredningsområde utsätts för kraftiga monsunregn som ger temperaturer över 30 grader och mer än 80 procents luftfuktighet från juni till oktober och torra, svala vintrar med temperaturer ner till 15 grader med bara lätta duggregn och dimma från november till maj.
Den bör ges en placering med mycket ljus, med tillvänjning kan den klara några timmar om dagen med full sol, och intermediära temperaturer. För att inducera blomningen, minska vattningen och sänka temperaturen i tre veckor på vintern. Den tål kallare temperaturer än många andra inom undersläktet Brachypetalums, ner till tolv grader.
Odla i en väldränerad mix med medelgrov barkkompost, perlit, sphagnum och kalksten. Använd helst små krukor med många hål för att öka luftcirkulationen i komposten. En kompakt och vattensjuk kompost tar snabbt död på en planta. Ge svag gödning ett par gånger i månaden, en fjärdedel av den rekommenderade dosen, och skölj igenom komposten med rent vatten med jämna mellanrum då den är känslig för uppbyggnad av salter. Plantera om när blomningen är avslutad. Vid omplantering bryts ofta skotten loss från moderplantan och kan lätt delas i nya plantor så länge varje del får tre eller fyra skott.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium godefroyae// God.-Leb. (1883)
//Cypripedium concolor// var. //godefroyae// Collett & Hemsl. (1891)
//Cordula godefroyae// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphiopgodefroye.htm]] 2015-05-13
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/brachypetalum/godefroyae/index.html]] 2015-05-13
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_godefroyae]] 2015-05-13
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Paphiopedilum-godefroyae&lang=en]] 2015-05-13
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-godefroyae.html]] 2015-05-13

























































































!Allmänt och utbredning
Arten är endemisk för nordvästra Argentina där den växer främst i fuktiga bergsområden nära vattenflöden mellan 700 och 3000 meters höjd över havet.

!Utseende
//Aa. achalensis// är en terrestrisk orkidé utan pseudobulber och med tunna rötter. Dess blad är avlångt lansettlika och bildar en basal bladrosett tätt mot marken. Från mitten av bladrosetten kommer under sommaren en upptill 30 cm lång blomstängel vars övre tredjedel är tätt beströdd med knappt centimeterstora, vita, blommor. Sepalerna är avlånga, mer eller mindre ovala, cirka fyra mm långa och i allmänhet mindre än petalerna. Läppen är formad som en huva, markant flikig med en tandade kant.

!Skötsel
Den växer i stenig jord under svala förhållanden som är svåra för amatörodlaren att efterlikna. Det plus de oansenliga blommorna gör att arten troligen inte odlas i någon större utsträckning.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/aaachalensis.htm]]



































!Allmänt och utbredning
Denna miniatyrart återfinns i delstaten Assam i Indien, Myanamar/Burma, Thailand och den kinesiska delstaten Yunnan mellan 500 och 1200 meters höjd.

!Utseende
Denna kompakta planta växer monopodialt och saknar pseudobulber utan bladen och tjocka, vita rötter kommer från en mycket kort, grenade stam. Hela plantan blir sällan större än tio cm hög. Bladen är köttiga, mörkgröna med purpurröda prickar och översållad av små vårtor som ger hela bladet en ojämn, sandpappersaktig textur. Under sommaren kommer en kort, hängande, bara några cm lång, blomstängel som kan bär en kompakt blomställning med mer än 20 stycken centimeterstora blommor i rosa och vitt. De vanligtvis starkt doftande blommorna öppnas i succession under flera veckor. Vissa kloner saknar helt eller har bara mycket svag doft.

!Skötsel
Det är tåliga små plantor som tillväxer långsamt med i bästa fall bara två eller tre nya blad per år. De vill ha en ljus eller till och med mycket ljus växtplats, 30000 till 40000 lux, där temperaturen inte går under 15 grader nattetid och helst inte alltför mycket över 30 grader under dagarna. Ungplantor behöver en lätt halvskugga tills de kan vänjas vid starkt ljus.
De har flera torkanpassningar men eftersom de är så små kan de inte lagra så mycket vätska utan de behöver regelbunden tillförsel men med kort upptorkning mellan vattningarna. Minst en eller två gånger i veckan under tillväxten, rötterna bör blir helt gröna under vattningen. Vintertid kan en gång i veckan, och ingen gödning, räcka. Vattna helst på morgonen så de hinner torka upp till kvällen och var försiktig så inget vatten blir stående i bladvecken, de är känsliga för röta, speciellt under svalare förhållanden.
Vanligen odlas de monterade men hängande korgar med en väldränerad mix med medelgrov barkkompost fungerar också bra.

!Synonymer
__Homotypic Synonyms:__
//Saccolabium fragrans// C.S.P.Parish & Rchb.f. (1874)
//Gastrochilus fragrans// Kuntze (1891)
__Heterotypic Synonyms:__
//Saccolabium tixieri// Guillaumin (1958)
//Schoenorchis tixieri// Seidenfadden (1975)
//Schoenorchis manipurensis// Pradhan (1978)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/schoenfragrans.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Schoenorchis_fragrans]]















































































































!Allmänt och utbredning
Denna miniatyrart återfinns i bergsmolnskogar från nordvästra Venezuela, genom Ecuador och till centrala eller norra delen av Peru mellan 700 och 3000 meters höjd.
Namnet kommer för att hedra den holländske insamlaren Reinhart van Lansbergen, som under senare delen av 1800-talet samlade in många orkidér i områdena runt Caracas.

!Utseende
De saknar pseudobulber utan bladstjälken kommer direkt från en underjordisk stam. Stjälken är vid basen omsluten av fem till sju tunna, vita täckblad. I toppen kommer ett ensamt, nästan helt upprätt ovalt blad som undertill är helt purpurfärgat. Bladen som blir maximalt 35 mm långt och 25 mm brett, är rundare än hos andra arter inom släktet. Blommorna kommer under vintern och sommaren på en tre till sex cm lång blomstängel från basen av bladet under bladskivan. Stängeln bär under några dagar en enda blomma där en karaktäristisk detalj är att synsepalen smalnar av mot basen. Hela blomman blir ungefär sex mm bred och drygt en cm lång. Den växer snabbt och bildar gärna blommor. 

!Skötsel
Det är en svalväxande epifyt som trivs bäst i fukt och kyla. Ge den svagt ljus eller halvskugga utan direkt sol, mindre än 10000 lux. Plantera om vart annat år, förslagsvis i en mix av fin barkkompost med perlite och hackade spahgnum eller i ren shagnum. Vattna regelbundet och håll komposten fuktig och luftfuktigheten hög. Den bildar lätt nya plantor från bladsticklingar.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/reslansbergii.htm]]
[[Orcjids Wiki|http://orchids.wikia.com/wiki/Restrepia_lansbergii]]




















































!Allmänt och utbredning
Detta det största orkidésläktet med i skrivande stund, april 2014, <$view field="count"/> arter, är också ett av de mest geografiskt diversa med arter från Afrika, Asien och Amerika.
Man brukar dela in släktet i tre stora grupper: ''Bulbophyllum'', ''Cirrhopetalum'' och ''Cirrhophyllum'' (naturliga och konstgjorda hybrider mellan ''Cirrhopetalum'' och ''Bulbophyllum'').
Bulbos anses ofta som relativt svårodlade.

!Utseende
De finns i alla tropiska områden på Jorden och även blommornas morfologi är otroligt divers, med blommor som kan vara ensamma eller i klungor och spänner från några mm stora blommor till mer än 20 cm mellan spetsarna som hos //[[Bulb. echinolabium|14b5898e-e962-4e2a-bcc5-ae5a5b19c518]]//. Eftersom de flesta är insektspollinerade är en behaglig eller mindre lockande doft snarare regel än undantag.

!Skötsel
De har ett sympodialt växtsätt med ett till två blad på varje pseudobulb. De flesta inom släktet har ett krypande rhizom, med tunna rötter som inte förmår tränga speciellt djupt ner i odlingsmediet. Av den anledningen är en lös, väldränerad kompost att föredrar, eller kanske ännu hellre monterad på kork.
En temperatur mellan 15 och 25 grader passar de flesta inom släktet, utom för de som växer på lite högre altituder i Himalaya och Nya Guineas berg. Dessa föredrar en svalare omgivning och kan vara svåra att odla i varma områden. En ljus halvskugga, med morgonsol är optimala förhållanden i de flesta fall.
Bulbos föredrar en jämn fuktighet, med något torrare på vintern. Under tillväxtperioden bör de aldrig torka ut. På grund av den ständiga fukten behövs en god luftväxling för att inte svamp ska skapa problem.
Gödslingen är inga problem, bulbosar älskar näring. Använd en fjärdedel av normal rekommenderad dos vid varje vattning. Däremot är deras rötter känsliga för kvardröjande salter. Skölj därför igenom komposten ordentligt med jämna mellanrum.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Dendrobieae
''Undertribus'': Bulbophyllinae

''Typart''
//[[Bulb. nutans|738889af-fc14-4ecc-ac21-2c2a76ee554c]]// Thouars (1822))

''Uttal''
bulb-oh-FILL-um

''Synonymer''
__Heterotypic Synonyms:__
//Phyllorkis// Thouars (1822)
//Tribrachia// Lindl. (1824)
//Anisopetalon// Hook. (1825)
//Cochlia// Blume (1825)
//Diphyes// Blume (1825)
//Ephippium// Blume (1825)
//Epicranthes// Blume (1825)
//Osyricera// Blume (1825)
//Zygoglossum// Reinw. (1825)
//Bolbophyllum// Spreng. (1826) orth. var.
//Gersinia// Néraud (1826)
//Megaclinium// Lindl. (1826)
//Odontostylis// Breda (1827) nom. illeg.
//Sestochilos// Breda (1827)
//Epicrianthus// Blume (1828)
//Odontostylis// Blume (1828), nom. superfl.
//Hippoglossum// Breda (1829)
//Cirrhopetalum// Lindl. (1830) nom. cons.
//Lyraea// Lindl. (1830)
//Macrolepis// A.Rich. (1833)
//Malachadenia// Lindl. (1839)
//Pachyrhachis// A.Rich. (1845)
//Sarcopodium// Lindl. (1850)
//Oxysepala// Wight (1851)
//Bolbophyllaria// Rchb.f. (1852)
//Bolbophyllopsis// Rchb.f. (1852)
//Didactyle// Lindl. (1852)
//Xiphizusa// Rchb.f. (1852)
//Sarcobodium// Beer (1854)
//Bulbophyllaria// S.Moore in J.G.Baker (1877) orth. var.
//Adelopetalum// Fitzg. (1891)
//Pelma// Finet (1909)
//Codonosiphon// Schltr. (1913)
//Dactylorhynchus// Schltr. (1913)
//Monosepalum// Schltr. (1913)
//Tapeinoglossum// Schltr. (1913)
//Hyalosema// Rolfe (1919)
//Canacorchis// Guillaumin (1964)
//Cirrhophyllum// auct. (1965)
//Hapalochilus// Senghas (1978)
//Ferruminaria// Garay, Hamer & Siegerist (1994)
//Mastigion// Garay, Hamer & Siegerist (1994)
//Rhytionanthos// Garay, Hamer & Siegerist (1994)
//Synarmosepalum// Garay, Hamer & Siegerist (1994)
//Vesicisepalum// Garay, Hamer & Siegerist (1994)
//Oncophyllum// D.L.Jones & M.A.Clem. (2001)
//Peltopus// Szlach. & Marg. (2001)
//Blepharochilum// M.A.Clem. & D.L.Jones (2002)
//Carparomorchis// M.A.Clem. & D.L.Jones (2002)
//Fruticicola// M.A.Clem. & D.L.Jones (2002)
//Ichthyostomum// D.L.Jones, M.A.Clem. & Molloy (2002)
//Kaurorchis// D.L.Jones & M.A.Clem. (2002)
//Papulipetalum// M.A.Clem. & D.L.Jones (2002)
//Serpenticaulis// M.A.Clem. & D.L.Jones (2002)
//Spilorchis// D.L.Jones & M.A.Clem. (2005)
//Hamularia// Aver. & Averyanova (2006)
//Hordeanthos// Szlach. (2007)
//Lepanthanthe// Szlach. (2007)
//Trachyrhachis// Szlach. (2007)
//Tripudianthes// Szlach. & Kras (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbophyllum.htm]]
[[Camp Lot A Noise Tropical|http://www.clanorchids.com/bulbos.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Bulbophyllum|e98d2bd9-4878-4182-acc8-d67b9b46cc1f]]
[[Larrys Orchids and Tropical Plants|http://www.larrysorchids.com/culturesheets/orchids/Bulbophyllum.pdf]]

!Allmänt och utbredning
Arten är av medelstorlek, och växer framförallt som en litofyt under varma förhållanden på sydöstliga kalksten- och dolomitklippor. Både hög- och låglandspopulationer är kända, nästan från havsnivå upp till 900 meters höjd. Detta habitat är fullt exponerat för vintermonsunen under maj till juli.
Med sina hängande petaler är //Paph. sanderianum// antagligen en av de mest spektakulära av arterna inom ett facinerande släkte. Denna art, endemisk för kalkstensklipporna hos ett fåtal platser i området Gunung Mulu i naturreservatet Sarawak på nordvästra Borneo, har de längsta kronbladen hos någon orkidé. Dess över meterlånga sepaler ger den även en plats i Guiness Rekordbok. Trots att arten används i otaliga hybrider har ingen ärvt förälderns spektakulära långa sepaler.
Den upptäcktes 1885 av F. Sanders insamlare J. Foerstermann, men redan i början av 1900-talet hade den gått förlorad ur växtsamlingarna och troddes utrotade i naturen tills Ivan Nielson återupptäckte den 1978.
Namnet har den fått för att hedra den engelske orkidésamlaren Frederick Sander.

!Utseende
De har fyra till fem långsmala, glänsande gröna blad. Blomstängeln är purpurfärgad och kan bli 60 cm lång. Varje blomstängel producerar två till fem samtidigt öppna rödbruna blommor, med randiga petaler i varma färger och vridna, meterlånga laterala sepaler. Blommorna håller vanligen fem till sju veckor. I sitt naturliga habitat blommar de under tidig vår, men i odling kommer blommorna mer vanligt under sensommaren.

!Skötsel
Arten odlas ibland i hängande krukor för att ge stänglarna rum att växa och visa upp sig. Den behöver en varm och relativt ljus växtplats med hög luftfuktighet, men den behöver mindre ljus än andra flerblommiga arter, en ljus skugga räcker. Små plantor behöver, liksom alla småplantor i släktet, mer skugga än vuxna och härdade plantor. Runt 16000 lux indirekt ljus kan vara lagom. När de blir äldre kan ljusnivån höjas till 2100 lumen.
I naturen växer den på kalksten med rötterna förankrade direkt på den basiska yta och täckta med mossa och humus. I odling bör man försöka efterlikna de förhållandena så långt som möjligt, och ge plantan en öppen, väldränerad kompost med tillsatt kalk, snäckskal eller liknade material. 
Den är mycket känslig för sin omgivning och kan vara svår att odla tillsammans med andra paphar. Den måste hållas konstant fuktig, med den torra viloperioden bara aningen torrare och utan att någon gång tillåtas torka ut helt, eller stå i vatten. Lika viktigt som kvantiteten är kvaliteten på vattnet, //Paph. sanderianum// är väldigt känsligt för saltuppbyggnad. Inget salt utom gödningen i vattnet, i annat fall dör plantan snabbt, istället för långsamt som för andra paphar. 
Perioden maj till augusti utsätts den i naturen för varma, fuktiga vindar och kraftiga regn. Oktober är den varmaste och torraste månaden med dagstemperaturer runt 30 grader, och under nätterna ner till 18 grader. Från slutet av november fram till mitten av april är monsuntiden med kraftiga regn. Juni och juli är svalare med temperaturer runt 25 grader dagtid och ner till 15 grader nattetid. De är på sina växtplatser också utsatta för kraftig luftväxling, så en stadig luftström är gynnsamt.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium sanderianum// Rchb.f. (1886)
//Cordula sanderiana// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphsanderianum.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Paphiopedilum_sanderianum]]
[[GoreOrchidConservatory|http://www.goreorchidconservatory.com/SpecPgs/Paph-sanderianum.html]]
[[PhilsOrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_mastigopetalum.htm#sand]]
[[Owashtanong Islands Audubon Society|http://www.macatawa.org/~oias/environm.htm]]
[[NascentOrchids|http://www.nascentorchids.com/Library/sandcult.html]]
[[ArgusOrchids|http://www.argusorchids.net/IMAGES/photopages/SPECIAL/sanderianum/SAND_2.HTM]]













!Allmänt och utbredning
//Rspt. chrysoglossa// är en epifytisk art som idag troligen är utrotad från naturen. Den har bara påträffats en gång, av Francisco Villegas, runt 2100 meters höjd i en skog i Valle del Cauca, södra Colombia, som idag är avverkad och planterad med barrträd.
Namnet kommer från det grekiska ''chrysoglossa'' som betyder "gyllene tunga" efter läppen klargula färg.

!Utseende
Det är en liten epifyt som sällan blir över 20 cm stor. Den har tunna, hårlika rötter som saknar pseudobulber och vars upprätta bladstjälk är omsluten av upptill tio tunna, genomskinliga täckblad. Bladen blir sex till åtta cm långa och tre till fyra cm breda.
De två cm breda blommorna kommer under sommaren en och en på en fyra cm lång blomstängel på ovansidan av bladet, från bladbasen. //Rstp. chrysoglossa// liknar ytligt sett ytligt den randiga sorten //[[Rstp. flosculata|77189c32-0b39-42c1-bd3f-843a638e82b1]]// men skiljer sig från alla andra inom släktet genom den ljust gula läppen utan prickar men med röda ränder nedanför mitten mot spetsen.

!Skötsel
Håll plantan skuggigt och i svala eller intermediära temperaturer. Plantera den i en mix av fin barkkompost med perlit eller sphagnum. Vattna regelbundet och håll komposten jämnt fuktig.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/reschrysoglossa.htm]]
[[Orchides Wiki|http://orchids.wikia.com/wiki/Restrepia_chrysoglossa]]
[[Epidendra|http://www.epidendra.org/taxones/Restrepia/Restrepia%20chrysoglossa/restrepia%20chrysoglossa.pdf]]

































!Allmänt och utbredning
Arten återfinns i norra Vietnam där den växer i täta molnskogar på branta, mossiga granitklippor mellan 900 och 1220 meters höjd.
Den har länge ansetts som en synonym till [[ Paph. gratrixianum|9cd0b590-3d0d-4fde-a602-fffd03af0698]] eller naturhybrid mellan [[Paph. appletonianum|e47f2a8b-e629-4eb2-80dd-d7e6477e5d39]] × [[Paph. villosum|4ada762d-92fa-465b-aee9-f1c979290f41]] men har under det senaste årtiondet upprättats som egen art.
Kromosomtalet är 2n=26.

!Utseende
Det är en liten, kompakt planta som saknar pseudobulber. De fyra till åtta bladen blir upptill 30 cm långa och två till fyra cm breda, på ovansidan gröna och undertill mot basen täckta av purpurprickar. Under hösten eller tidig vinter kommer en drygt 35 cm lång blomstängel som bär en ensam, sju till åtta cm stor, hållbar blomma. Blomman har en gulbrun grund med rödbrun täckning. Den dorsala sepalen är vit, ofta ljust grön eller grönbrun mot basen och ett stråk med stora purpurfärgade prickar i mitten och ränder längs kanterna. Petalerna är gulbruna med mörkare färg på ovansidan av mittnerven

!Skötsel
Den vill ha jämn vattning ofta under tillväxten, var fjärde till var femte dag, och hög luftfuktighet hela året, den har ingen torr viloperiod. I sitt naturliga habitat får de konstant fukt från dimmorna som sveper in bergen där den växer, även under våren som vanligen är den torraste perioden. Ge dem en skuggig växtplats med intermediära eller varma temperaturer. 
De vill ha en svagt sur, väldränerad, medelgrov barkkompost som håller fukten, gärna med grus eller leca i och fri från kalcium.
För att inducerar blomningen behövs en fyra till sex veckor lång period med lägre temperaturer och minskad vattning under början av vintern.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum villosum// var. //affine// Braem(1988)
//Paphiopedilum villosum// f. //affine// O.Gruss & Roellke (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphaffine.htm]] 2015-01-30
[[Phils World of Orchid|http://homepages.ihug.co.nz/~tomnz/paphframe/paph_paphiopedilum.htm#affine]] 2015-01-30






















!Allmänt och utbredning
Arten återfinns som en epifytiskt växt i Assam, Bangladesh, östra Himalaya, Nepal, Bhutan, Sikkim, Andaman Islands, Myanamar, Thailand, Laos, Cambodia, Nicobar Islands och Vietnam i tropiska och subtropiska dalar mellan 200 och 1400 meters höjd över havet.

!Utseende
Pseudobulberna kommer från i stort sätt samma punkt och bildar ett hängande grenverk. Bladen kommer arrangerade i två alternerande rader på motsatta sidor om pseudobulben. 
Den blommar under sommar och höst med mindre än en och en halv cm stora, äppeldoftande blommor. Blommorna som är ljusgula kommer en och en i toppen på en mycket kort stängel direkt på bulben, vid varje bladfäste längs hela bulben men främst mot toppen. Då bulberna hänger ner över kanten på krukan kan det nästan vara svårt att se blommorna som hamnar på undersidan.

!Skötsel
De kräver en varm och ljust skuggig växtplats. Håll plantan fuktig och göd med svag dos med varje vattning under tillväxtperioden. Reducera långsamt temperatur och vattningen när vintern närmar sig. Under vintern håll den helt torr tills de nya skotten kommer på våren. 
Odla dem i en väldränerande medelgrov barkkompost med sphagnum. Plantera inte om för ofta då de inte tycker om att bli störda och kan ta ett tag på sig att komma igen.

!Synonymer
__Homotypic Synonyms:__
//Aporum anceps// Lindley (1830)
//Ditulima anceps// Rafinesque (1838)
//Callista anceps// Kuntze (1891)

!Rekommenderad läsning
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dendrobium_anceps]]
[[Killerplants|http://www.killerplants.com/plant-of-the-week/20080225.asp]]
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/denancep.htm]]





























































































































!Allmänt och utbredning
Det är en terrestrisk art endemisk för fyra öar i Filippinerna, Luzon, Mindanao, Camiguin och Dinagatön, där de växer i fuktiga låglandsskogar mellan 300 och 1830 meters höjd.
De är i dag svårt hotad av hårt insamlingstryck och habitatsförstörelse.
Namnet kommer från det latinska ''cilium'' som betyder "ögonfrans" och anspelar på de tunna håren som finns längs kanten av sepaler och petaler. Taxonomiskt ingår de i undersläktet Sigmatopetalum sektion Barbata undersektion Loripetalum. Kromosomtalet är 2n=32.

!Utseende
Den får fyra till sex stycken upptill 16 cm långsmala blad, ovantill mönstrade i ljust och mörkt grönt. Bladen blir mellan två och fem cm breda och övergår undertill mot basen i purpur. Den blommar under våren eller sommar på en upptill 30 cm lång blomstängel med en ensam, åtta cm bred blomma. Sepalerna är vita vid basen, övre delen är färgade i ljust lila och grönt med lila nerver. Petalerna är vita med de övre två tredjedelarna översållade av svarta prickar och mörklila nerver. Läppen är mörkt purpurfärgad.

!Skötsel
De växer på lavaklippor i områden med kraftiga regn under våtperioden. Odla dem i måttligt till starkt ljus och intermediära till varma temperaturer med hög luftfuktighet. Plantera i en väldränerad kompostmix med medelgrov bark, perlit och vitmossa. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning krävs en lägre temperaturer på vintern.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium ciliolare// Rchb.f. (1882)
//Cordula ciliolaris// Rolfe (1912)
//Paphiopedilum superbiens// subsp. //ciliolare// M.W.Wood (1981)
__Heterotypic Synonyms:__
//Cypripedium ciliolare// var. //miteauanum// Linden (1888)
//Cypripedium miteauanum// L.Linden & Rodigas (1888)
//Paphiopedilum ciliolare// var. //miteauanum// Pfitzer (1903)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphciliolare.htm]] 2015-04-16
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_ciliolare]] 2015-04-16
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:147047]] 2015-04-16
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/sigmatopetalum/ciliolare/index.html]] 2015-04-16
[[The Gore Orchid Conservatory 's|http://goreorchids.com/SpecPgs/Paph-ciliolare.html]] 2015-04-16

;R.L.M. Pierik, P.A. Sprenkels, B. Van Der Harst, Q.G. Van Der Meys, 1988
://Seed germination and further development of plantlets of //Paphiopedilum ciliolare// Pfitz. in vitro//
:Scientia Horticulturae, Volume 34, Issues 1–2, January 1988, Pages 139–153
:doi:10.1016/0304-4238(88)90084-2
















































!Allmänt och utbredning
Arten har ännu så länge bara hittats i delstaten Santander i Colombia, där den växer terrestriskt. Denna nya art liknar //[[Phrag. fischeri|929bf530-becb-4d73-9e75-e4b8b31ec662]]// och //[[Phrag. schlimii|5b712237-dcf2-4c47-896e-1d1711099790]]//, men skiljer sig i formen på staminoiden och färgen på blommorna. Till skillnad från historien när //[[Phrag. kovachii|13ac8c20-500e-46f0-ab72-ab1c5101ea29]]// upptäcktes, reste Paula Viveros till Colombia för att undersöka plantan eftersom Manzur kunde inte skicka ett prov på grund av internationella restriktioner.
Den är uppkallad efter den pensionerade professorn David Angel Manzur, Facultad de Agronomía, Universidad de Caldas, Manizales, Colombia, som upptäckte arten. Taxonomiskt tillhör den sektionen Micropetalum.

!Utseende
Det är en medelstor, kompakt art som saknar pseudobulber utan bildar en solfjäder med sex långsmala blad, 30 till 36 cm långa och två till fyra cm breda. Tidigt under våren kommer en tolv till 27 cm lång, upprätt blomstängel som producerar upp till tre på varandra följande blommor. Sepalerna är gulgrön, två cm långa och hälften så breda. Petalerna är vita med toner i ljust violett. Läppen är vit med violetta toner, gulgrön mot basen och med violetta markeringar. Staminoiden är klart gulgrön, stor och rund.

!Skötsel
//Phrag. manzuri// är en art som växer i lövkomposten på branta sluttningar i en våt bergsmiljö. Den föredrar en intermediär temperatur, god luftcirkulation och massor av fukt. Ljuset bör vara tillräckligt för cattleyor men mindre än full sol. Arten gynnas av rent vatten av god kvalité och regelbundna men svaga gödselgivor. Kompostmixen bör hålla vatten bra men tillåta luft runt rötterna. De måste planteras om innan komposten bryts ned alltför mycket, minst en gång om året.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragmanzurii.htm]] 2015-10-26
[[Dr. Tanaka's Home Page|http://www.orchid.or.jp/orchid/people/tanaka/orchid/org/shinshu/Phrag/ennew13.html]] 2015-10-26

;Wesley E. Higgins & Paula ViVeros, 2009
://A New Phragmipedium (Orchidaceae) from Colombia//, Lankesteriana 8(3): 89-92. 2008
:http://www.epidendra.org/taxones/Phragmipedium/Phragmipedium%20manzurii/04%20Higgins&Viveros.pdf, 2015-10-26








!Allmänt och utbredning
//Cym. aloifolium// är typarten för //[[Cymbidium|96a115b4-bf33-4e6d-beb6-529e665f3585]]// och även om den är allmänt spridd är den inte så variabel som många andra arter. Den växer på levande palmträd, död ved, mossiga klippor och halvmultnade lövansamlingar i torra lövfällande låglandsskogar och savannliknande skogsområden från havsnivå till 1500 meters höjd i Guangdong, Hong Kong, Kina, Bangladesh, östra Himalaya, delstaten Assam i nordöstra Indien, Nepal, Sri Lanka, ögruppen Andamanerna, Myanamar, Thailand, Laos, Kambodja, Vietnam, Malaysia, Java och Sumatra.
Det var den första arten inom släktet som introducerades i Europa och beskrevs av Linné som //Epidendrum aloifolium// i hans ''Species Plantarum'' 1753. Beskrivningen baserades på teckningar av Rheede på en planta insamlad i ögruppen sydvästra om Indien, växande på ett träd av arten //Strychnos nux-vomica//. Därför trodde Linné att alla orkidér växer på träd och skapade det nya släktet //[[Epidendrum|ca39aca3-95ba-4823-8634-a87714cde206]]// som kan översättas med "på träd". 1799 flyttade Swartz arten till släktet //[[Cymbidium|96a115b4-bf33-4e6d-beb6-529e665f3585]]//.
Arten kan förväxlas med //[[Cym. bicolor|1372757f-1d2a-4787-a870-d8062113ecd6]]// som växer i samma habitat och koloniserar samma nisch. Trots att deras distribution överlappar verkar de inte bilda hybrider då de har olika blomningsperioder.

!Utseende
De har väldigt små pseudobulber som är helt omslutna av bladbasen. Nya bulber produceras tätt intill de gamla och gör att äldre plantor ser större ut än de är. Varje planta bär bara fyra till fem stycken, fem cm breda och mer än 40 cm långa, kraftiga, läderartiga blad.
//Cym. aloifolium// blommar under vintern till tidig vår på en upptill 75 cm lång, hängande blomstängel som kan producerar mer än 40 stycken svagt doftande blommor. Blommorna är fyra till fem cm stora, i ljust gulgröna nyanser med en mycket mörkt röd bred rand mitt på petaler och sepaler. Läppen är ljust gul till ljust krämfärgade med mörkröda ränder längs hela längden. Artens blommor kan lätt förväxlas med //[[Cym. dayanum|ccac53a1-289a-494c-9756-3a788d7c213e]]// men har en rundare läpp och en klargul timglasformad markering på mitten av läppen, eller //[[Cym. bicolor|1372757f-1d2a-4787-a870-d8062113ecd6]]// som dock inte har lika tydligt mörkröd nervatur på sidan av läppen och kortare sidlober.

!Skötsel
Arten är mer temperaturtålig än många andra cymbidiumarter och kan odlas svalt till varmt under ljust halvskuggiga förhållanden. Odla i en väldränerad blandning av barkkompost och perlit, plantorna föredrar en liten upptorkning mellan vattningarna. Den behöver en kort vintervila för att blomma ordentligt. Under denna tid behöver den en reducering i vattningen. Eftersom blomstänglarna är hängande passar det bra att ha dem i hängande korgar.
De förökas enkelt genom att bryta isär och dela upp bulberna vid omplanteringen.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum aloifolium// Linne (1753)
__Heterotypic Synonyms:__
//Epidendrum pendulum// Roxb. (1795)
//Epidendrum aloides// Curtis (1797)
//Cymbidium pendulum// Swartz (1799)
//Aerides borassii// Buch.-Ham. (1818)
//Cymbidium erectum// Wight (1851)
//Cymbidium simulans// Rolfe (1917)
//Cymbidium intermedium// H.G.Jones (1974)

!Rekommenderad läsning
[[Orchid Wiki|http://orchids.wikia.com/wiki/Cymbidium_aloifolium]]
[[Cymbidium Species|http://www.cymspecies.com/aloifolium.htm]]
























!Allmänt och utbredning
Det är en medelstor, varmväxande epifyt från Mexiko till Costa Ricas fuktiga tropiska skogar upp till 1500 meters höjd över havet.

!Utseende
De får cylindriska, lateralt hoppressade pseudobulber, täckta av ett eller flera brunfläckade bladskidor. Bulben bär ett ensamt elliptiskt blad.
Den blommar med upptill tre blommor på en fem till tio cm lång, smal blomstängel från basen av en nyligen mogen bulb. De vaxartade blommorna kommer, stora och doftande, under våren och sommaren. Sepaler och petaler är smala och spiralvridna med en ljus lavendel eller purpurbrun färg. Den stora, nästan runda läppen är vit med gapet invändigt bepudrat med prickar i rött och brunt.

!Skötsel
Plantan vill ha en varm och skuggig placering. De kan med fördel planteras högst upp på en liten upphöjning, för att visa upp de korta blomställningarna som kommer från basen av plantan.
Ge den ordentligt med vatten under tillväxten, följd av en två till tre veckors viloperiod.
Den tolererar inte gammal kompost som börjat brytas ner så plantera om den regelbundet.

!Synonymer
__Heterotypic Synonyms:__
//Trichopilia tortilis// f. //immaculata// Dressler & Bogarán (2009)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/trichtortilis.htm]]
[[Orchid Online|http://www.orchidsonline.com.au/interactive/book/print/2387]]






!Allmänt och utbredning
Det är en terrestrisk art som förekommer bland långt gräs på kalkstensklippor, på stenblock i ekskogar och i kalkhaltigt grus längs strömmar och bäckar i den indiska delen av Himalaya och Bhutan mellan 1300 och 2200 meter över havet.
Namnet kommer efter orkidéentusiasten R. Fairrie från Liverpool som var den förste att visa upp ett blommande exemplar för RHS 1857, vilket gör den till en av de tidigaste papharna som upptäcktes. Entusiasterna på den tiden odlade dem för varmt i sina växthus och dödade tusentals av dem. 1905 fanns bara en enda känd planta i hela Storbritannien. Den kände orkidésamlaren Frederick Sander, erbjöd en för den tiden svindlande summa av 1000 pund för en planta och information om dess växtplats. Många orkidéjägare hoppade på chansen, och inom tre månader efter erbjudandet offentliggjorts hade arten återupptäckts. Nästan 200 plantor såldes så småningom på auktion och räddade firman Sander & Co från en ekonomisk katastrof.
Taxonomiskt tillhör den undersläktet Paphiopedilum sektion Ceratopetalum. Kromosomtalet är 2n=26. Troligen pollineras den av flugor.

!Utseende
Det är en kompakt art som i naturen lätt bildar stora bestånd med många skott tätt tillsammans. De fyra till åtta stycken åtta till 28 cm långsmala bladen är mörkgröna på ovansidan och ljust gröna på undersidan med en tydlig längsgående köl. Under vintern kommer en upptill 45 cm lång blomstängel som bär en ensam, tio cm stor blomma. Blomman har en bred, vita dorsal sepal med fina lila linjer. Petalerna är vita med grönt mot basen och med lila linjer. Blomman har ett unikt utseende inom släktet genom petalernas uppåtvridna spetsar och tydligt krusade kanter. Läppen är ljust gulvit med lila prickar och ränder. Synsepalen är mindre än den dorsala sepalen, ljusgul med ränder i lila. Om den hålls svalt kan blomman hålla mer än tre månader.

!Skötsel
Oktober till april är de torraste månaderna med bara sporadiska, lätta duggregn och dimma för att hålla plantan lätt fuktig under vintervilan. Juni till augusti är de blötaste månaderna med ständiga, kraftiga regn.
Den föredrar en öppen, väldränerad kompostmix av medelgrov bark och perlite. De odlas bäst i svala temperaturer, mellan sex till 18 grader, under vintern och intermediära till varma temperaturer, 16 till 30 grader, under sommaren under starkt ljus, 20000 till 30000 lux, men inte full sol. Det bör vara en pH-neutral kompost som håller fukten utan att vara genomblöt för länge. Vattna kraftigt under växtsäsongen för att minska vattning och temperatur under vintern under minst sex veckor för att inducera blomningen.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium fairrieanum// Lindl. (1857)
//Cordula fairrieana// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium assamicum// Linden (1858)
//Paphiopedilum fairrieanum// var. //bohlmannianum// Matho (1942)
//Paphiopedilum fairrieanum// var. //giganteum// Pradhan (1979)
//Paphiopedilum fairrieanum// var. //nigrescens// Pradhan (1979)
//Paphiopedilum fairrieanum// f. //bohlmannianum// Braem (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphfairianum.htm]] 2015-05-03
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/paphiopedilum/fairrieanum/index.html]] 2015-05-03
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_fairrieanum]] 2015-05-03
[[Orchidkarma|http://orchidkarma.com/paphiopedilum-fairrieanum/]] 2015-05-03
[[Paphiness Orchids|http://paphinessorchids.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=62&category_id=1&manufacturer_id=0&option=com_virtuemart&Itemid=1]] 2015-05-03























!Allmänt och utbredning
Denna epifytiska minatyrart är endemisk för Madagaskars fuktiga bergsskogar mellan 600 och 1500 meters höjd.
Den är döpt för att hedra den franske 1800-tals botanikern [[Alfred Grandidier|http://en.wikipedia.org/wiki/Alfred_Grandidier]].

!Utseende
Även som fullvuxen är det en liten planta, den blir sällan större än åtta cm. Den har en kort stam med fem till sju långsmala blad. Den korta blomstängeln kommer under april till juni och bär en ensam blomma i renaste vitt. I sitt naturliga habitat kommer blomman under oktober till januari. Blomman är stjärnformade med en rundad läpp och är proportionellt stor i förhållande till plantans storlek. En åtta cm stor planta kan producera blommor som blir fem till sex cm stora med en upptill 14 cm lång nektarsporre. Den håller ungefär fyra veckor. Framförallt under kvällen och natten har blomman en stark, söt, jasminliknande doft.

!Skötsel
Den behöver svala till varma växtförhållanden med hög luftfuktighet, mellan 14 och 22 grader är lagom. Den måste ha god luftcirkulation då de inte kan fördrar blöta förhållanden. Ge den en ljus växtplats med 15000 till 35000 lux som för [[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]] eller [[Phalaenopsis|923740e0-a068-475f-9748-ced1adbe3b29]]. Det motsvarar ett östfönster under sommaren, ett söderfönster under vintern eller cirka 25 cm under ett lysrör.
Under vintern vattna när komposten precis torkat ut och spola då igenom krukan ordentligt. Under tillväxtperioden kan komposten hållas mer jämnt fuktig och ges en svag dos gödning vid varje vattning. När knopparna kommer och under blomningsperioden är det extra viktigt att hålla den jämnt fuktig.
Den odlas bäst monterad på kork eller korg, men det går även i grunda lerkrukor med en mix av barkkompost, träkol och/eller trädormbunke. Plantera om den endast när det verkligen är nödvändigt och var försiktig så rötterna inte skadas. Våren när tillväxten börjat igen är den bästa tiden att plantera om.

!Synonymer
__Homotypic Synonyms:__
//Macroplectrum didieri// Baill. (1907)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/angdidieri.htm]]
[[Encyclopádia Angrácorum|http://angraecum.org/Species/Angraecum/Angraecum_didieri.htm]]
[[Orchid Web|http://www.orchidweb.com/products/angraecum-didieri~428.html]]
[[Botanica Ltd.|http://www.botanicaltd.com/images/species/species%20photo%2Bdescription%20pages/angraecum-didieri.htm]]
[[Most beautiful orchids|http://mostbeautifulorchids.blogspot.se/2012/04/angraecum-didieri.html]]














































!Allmänt och utbredning
Denna art växer på de torra, kustnära västra sluttningarna av Anderna från södra Columbia till norra Peru och Ecuador från havsnivå upptill 2000 meter över havet.

!Utseende
Det finns två typer av //C. maxima//. En med korta, kompakta pseudobulber och relativt korta, upprätta blad som blommar med tre till fem mörkt lavendelfärgade blommor på blomstjälken.
Den andra typen har längre klubbformade bulber, växer vid havsnivån och blommar med många, stora, mycket ljust lavendelfärgade blommor utan några av de mörka, intensiva färgteckningarna hos kortbulbsvarianten. De underbart doftande, hållbara, blommorna blir drygt 15 cm stora. De kommer under senhösten, från mitten av november till tidig december.
//C. maxima// är en av få av de storblommiga cattleyorna som är enkla att identifiera med hjälp av sitt utseende. Alla färgformer av arten har det gemensamt att de har en karaktäristisk gul mittrand längs läppen.

!Skötsel
Även om de båda formerna av arten är lättodlade kräver de något olika växtbetingelser. De börjar båda tillväxa under våren och båda blommar under senhösten, men deras krav på nattemperatur är inte desamma.
Som en bergsväxt kräver kortbulbsvarianten ner till 15 grader och kan klara temperaturer ner till tio grader.
Långbulbsvarianten som växer nära havsnivån, vill däremot ha en lägsta temperatur runt 20 grader. Båda typerna klarar en dagstemperatur upp till 30 grader.
Kortbulbsvarianten föredrar mer sol än den andra typen, men båda växer bäst med bra luftcirkulation och mycket ljus. Om bladen är ljust gröna får den tillräckligt med ljus. Kortbulbsvarianten har ofta en del lila pigment i bladverket som långbulbstypen saknar.
För att tillfullo njuta av långbulbsvariantens stora bulber måste plantan ha ett bra rotsystem och det åstadkoms lättast om plantan hålls i en öppen kompost i något för små krukor. Bulberna hos //C. maxima// växer bättre och verkar föredra den tätare vattningen i lerkrukor, jämfört med plastkrukor eller att sitta monterad. När de inte tillväxer ska de hållas torrare.
De bör omplanteras under våren så snart de nya rötterna börjar utvecklas från den främsta bulben. Plantan bör enbart gödslas under tillväxtperioden vår och sommar.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum maximum// Rchb.f (1861)
__Heterotypic Synonyms:__
//Cattleya maxima// var. //aphlebia// Rchb.f. (1884)
//Cattleya malouana// Linden (1885)
//Cattleya maxima// var. //backhousii// Rchb.f. (1885)
//Cattleya maxima// var. //hrubyana// L.Linden & Rodigas (1885)
//Cattleya maxima// var. //marchettiana// B.S.Williams (1891)
//Cattleya maxima// f. //aphlebia// Roeth (2010)

!Rekommenderad läsning
[[Chadwick and Son Orchids|http://www.chadwickorchids.com/Cattleya/maxima.htm]]
[[Orchidee in Umbria|http://digilander.libero.it/uparis/immagini/cat_271_03.jpg]]






































!Allmänt och utbredning
Släktets <$view field="count"/> terrestriska arter hör framförallt hemma i Sydamerika, från Peru med ett fåtal arter som sträcker sig norrut till Costa Rica och Trinidad med den största mångfalden observerats i Brasilien. De föredrar öppna savanner, klippformationer och mossar, och de växer ofta i fuktiga, väldränerad, sandig, sura jordar på låglandet och lägre bergsskogar upp till 2000 meters höjd.
Två nordamerikanska arter inkluderades tidigare i det här släktet, men betraktas sedan 2009 som ett separat släkte, //[[Cleistesiopsis|f3e8427f-5032-4c44-abb7-646b59da2f60]]//. De är nära besläktade med //[[Pogonia|d3f0ae80-6d80-4766-b3f9-f60ded2debe9]]// som många av arterna tidigare tillhört.
Namnet kommer från det grekiska ''kleistos'' som betyder "stängd" och anspelar på läppen och petalerna som bildar ett rör eller tub under större delen av sin längd och endast delar sig nära spetsen, blomman kommer därmed framstå som stängd.

!Utseende
De saknar pseudobulber utan bildar tjocka, underjordiska rhizom med smala fibrösa rötter. Från jordstammen bildas en långsmal, upprätt stam med en till tre smala, tunna, skaftlösa blad som kommer alternerande, glest utspridda längs stammen. Vanligtvis produceras ett fåtal iögonfallande, tubliknande blommor. Sepalerna är längre och smalare än petalerna men annars snarlika. Läppen är hel eller treflikad och kännetecknas av längsgående kammar eller lameller.

!Skötsel
Ge dem en varm, ljus växtplats utan direkt sol och håll plantan fuktig. Odla i en väldränerad, sandig och sur barkkompost.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Pogoniinae ''Undertribus'': N/A

----
''Typart''
//Cls. lutea// Lindley (1840) numera synonymt med //[[Cls. grandiflora|e9e56319-69a3-4259-9482-11dc8276b187]]// Schltr. (1926)

----
''Uttal''
cleis-tes

----
''Synonymer''
N/A

!Rekommenderad läsning
[[eFloras|http://www.efloras.org/florataxon.aspx?flora_id=1&taxon_id=107295]] 2015-12-02

;Marta Kolanowska, Dariusz L. Szlachetko, 2013
://A new species of Cleistes (Orchidaceae, Vanilloideae) from Colombia//
:Polish Botanical Journal. Volume 58, Issue 2, Pages 625–627, ISSN (Online) 2084-4352, DOI: 10.2478/pbj-2013-0067, December 2013
























!Allmänt och utbredning
//Phrag. christiansenianum// [frag-muh-PEE-dee-um kris-tan-sen-ee-AH-num] är en stor terrestrisk art som växer i fuktiga skogar vid Colombias Stillahavskust.
Den är uppkallad efter den danske orkidéodlaren Hans Christiansen. Många taxonomer anser den vara en synonym till //[[Phrag. longifolium|6022728f-e2c9-4cbc-9f23-63dbdf9541cb]]// men Kew Royal Botanical Gardens [[World Checklist of Selected Plant Families|http://apps.kew.org/wcsp/home.do]] listar den som en accepterad art. Möjligen kan den vara en naturhybrid.

!Utseende
Det är en stor planta med upptill 80 cm långsmala, lansettlika blad. I sina naturliga livsmiljöer kan den blommande när som helst under året, men i odling kommer vanligen blomstänglarna under hösten eller våren. Dessa kan bli 60 till 90 cm lång och bär flera blommor i succession efter varandra. Blommorna har en grön färggrund och långa, tunna, vridna petaler med rödaktiga till purpurfärgade kanter. Den dorsala sepalen är grön med vita och röd-lila ränder.

!Skötsel
De bör hållas jämnt fuktig under hela året och får inte torka ut för länge. Växten är variabla i sitt temperaturspann, och kan klara sig bra i svala till varma omgivningar, upptill 30 grader som varmast. De föredrar en ljus växtplats med indirekt sol. Komposten måste hållas konstant fuktig utan att tillåtas torka ut för mycket. De kräver inte mycket gödning och bör vattnas med rent vatten eftersom de är känsliga för uppbyggnad av salter i komposten. Växterna kan tolerera mycket vatten så länge som komposten förblir i bra skick. De kan med fördel odlas i en blandning av vitmossa, kol och perlit, eller medelgrov barkkompost med perlit.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragchristensenianum.htm]] 2015-10-01
































































!Allmänt och utbredning
Denna vackra art, av många ansedd som den absolut vackraste av orkidéarter, är känd från endast tre växtplatser på Mt. Kinabalu, Sabah på norra Borneo. Här växer den terrestriskt eller litofytiskt på branta sluttningar mot norr och klippor nära rinnande vatten, med rötterna begravda i en lövrik kompost, mellan 600 och 1200 meters höjd.
Den anses näst intill utrotad i naturen, dels på grund av alltför mycket insamling dels därför att dess habitat försvinner när skogarna huggs ner.
Blomman har grön och röd prickiga petaler som för en parasitflugaliknar en massa bladlöss de vanligtvis lägger ägg på. När de försöker göra det får de med sig pollenmassor som förs vidare till nästa blomma.
Den är uppkallad efter Ferdinand James von Rothschild, vars familjen var känd inte bara för sin förmögenhet utan också för dess filantropi.

!Utseende
Denna storväxta planta kan bli mer än en halvmeter hög och bildar stora klungor. Bladen är avsmalnande lansettlika, enfärgat gröna och vanligen blir de sex dm långa och fyra cm breda.
Den kan blomma när som helst på året, men vanligen under vår och sommar med två eller fler blommor på en upprätt, upptill 75 cm lång blomstängel med blommor som kan vara mer än 30 cm långa. Den dorsala sepalen är gulaktig med otaliga längsgående mörka ränder, med vitt längs kanterna. Petalerna är gulgröna med mörkare ränder. Läppen är kanelbrun med jordfärgad kant runt munnen.

!Skötsel
Arten lär vara lätt att få att tillväxa, men svår att få att blomma, med en kall period viktigare än torka för att initiera blomningen.
De bör inte delas för tidigt eftersom det kan hämma blomningen. En välutvecklad planta blommar två år efter att den nya tillväxten kommit fram, men för ett ensamt skott kan det ta fyra år eller mer innan plantan blommar.
Växten bör odlas i en öppen, väldränerad kompost med en del mossa för att hålla vatten. De behöver bra luftväxling och mycket ljus, men inte direkt sol. Som sticklingar bör de odlas varmt och skuggat tills dess de är tio till tolv cm tvärs över. Därefter sköts de som mogna plantor, med svala växtförhållanden och svag näringsdos, drygt halva den rekommenderade dosen.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium rothschildianum// Rchb.f. (1888)
//Cordula rothschildiana// Rolfe (1912)
__Heterotypic Synonyms:__
//Cypripedium elliottianum// O´Brien (1888)
//Cypripedium neoguineense// Linden (1888) nom. nud.
//Paphiopedilum elliottianum// Stein (1892)
//Paphiopedilum rothschildianum// var. //elliottianum// Pfitzer (1903)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphrothchildianum.htm]]
[[PhilsOrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_mastigopetalum.htm#roth]]
























!Allmänt och utbredning
Det är en miniatyrart från den malaysiska övärlden som flyttats från det närbesläktade Eria. De växer epifytiskt på trädstammar och grenar längs bergsutlöpare mellan 1400 och 2100 meters höjd.
Artnamnet kan helt enkelt översättas med "eria-liknande".

!Utseende
Pseudobulberna är korta, nästan helt dold av täckblad, med ett ensamt, långsmalt blad från toppen. Hela plantan blir sällan större än fem cm stor. Under sensommaren eller tidig höst kommer från basen av bulben en kort blomstängel, kortare än bladen, med en gnistrande vit, stjärnformig blomma, drygt en cm stor. Läppen är liten och färgad i gulgrönt med två purpurfläckar mot basen. Möjligen sluter sig blomman om natten.

!Skötsel
De föredrar en sval till varm växtplats med hög luftfuktighet.

!Synonymer
__Homotypic Synonyms:__
//Eria pygmaea// Hook.f. (1890)
//Ceratostylis eriaeoides// Hook.f. (1891), nom. superfl
//Pinalia pygmaea// Kuntze (1891)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cerateria.htm]]

















!Allmänt och utbredning
//Epi. ciliare// är en liten epifytisk eller mer sällan, litofytisk, orkidé som är vanligt förekommande i stort sett hela den tropiska delen av Amerika, från mangroveskogarna i den karibiska övärlden till de fuktiga bergsskogarna i Mexiko och Peru. I regel växer de dock mellan 500 och 1000 meters höjd över havet.

!Utseende
Plantan är liten, den blir bara mellan två och fem dm hög som mest, men sällan mer än tre dm. De lätt tillplattade pseudobulberna kommer på ett krypande rhizom. Bulberna bildar fem eller sex noder och får ett eller två blad i toppen.
De kan blomma när som helst på året, men framför allt på hösten under september och igen i januari. Den upprätta blomställningen kommer från en nyligen mogen bulb och kan bli 30 cm lång. Den bär en klunga med mellan fem och tio blommor. Blommorna har gröngula sepaler och petaler, och en vit, ordentligt fransad läpp som särskiljer den från alla andra medlemmar av släktet.

!Skötsel
Som de flesta andra inom //Epidendrum// är det en lätt art att odla, vilket tillsammans med sin ringa storlek gör den till en bra växt för nybörjar med små fönster.
I motsats till de flesta av sina släktingar föredrar den växtförhållanden som närmast påminner om de för cattleyorna. Den vill ha en sval till varm omgivning med lätt skugga. Under tillväxten kräver de ordentligt med vatten och frisk luft med ordentlig gödning en gång i månaden. Vintervilan börjar under den sena hösten, då mycket lite vatten och ingen näring är nödvändig. Vilan hjälper till att stimulera nästa års blomning.
Arten förökas lätt genom delning av bulberna under våren, när tillväxten börjar igen. //Epi. ciliare// framställer ingen nektar, men den doftar som om den hade likadan nektar att bjuda på som andra, samtidigt blommande arter.

!Synonymer
__Homotypic Synonyms:__
//Auliza ciliaris// R.A. Salisbury  (1812)
//Epidendrum ciliare// var. //typicum// Stehlé (1939) nom. inval.
//Encyclia ciliaris// A.Lemé (1955) no basionym ref.
//Coilostylis ciliaris// Withner & P.A.Harding (2004)
__Heterotypic Synonyms:__
//Epidendrum cuspidatum// G.Lodd. (1817)
//Coilostylis emarginata// Raf. (1838)
//Epidendrum viscidum// Lindl. (1840)
//Epidendrum cuspidatum// var. //brachysepalum// Rchb.f. (1846)
//Epidendrum ciliare// var. //cuspidatum// Lindl. (1853)
//Epidendrum ciliare// var. //viscidum// Lindl. (1853)
//Epidendrum ciliare// var. //minor// Stein (1892)
//Epidendrum sanctalucianum// H.G.Jones (1975)
//Coilostylis cuspidata// Withner & P.A.Harding (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/coilciliaris.htm]]
[[Cals Plant of the Week|http://www.plantoftheweek.org/week279.shtml]]
[[Killer Plants|http://www.killerplants.com/plant-of-the-week/20011126.asp]]













!Allmänt och utbredning
//Paph. dianthum// [paf-ee-oh-PED-ih-lum dy-ANTH-um] är en endemisk art från ett litet område som innefattar provinserna Yunnan, Guizhou och Guangxi i sydvästra Kina och norra Vietnam där den växer litofytiskt eller mer sällan epifytiskt i öppna, mossiga och fuktiga skogar på eroderad kalkstensklippor mellan 460 och 1450 meters höjd.
Den pollineras främst av honor av arten //Episyrphus balteatus// som tillhör släktet [[flyttblomflugor|http://sv.wikipedia.org/wiki/Flyttblomfluga]].
Namnet som kommer från grekiskan betyder "med två blommor" kan möjligen hänvisa till det vanligaste antal blommor i naturen. Kromosomtalet är 2n=26. Den är nära besläktad med //[[Paph. parishii|f055157f-6343-488e-b756-ade335685867]]// och betraktades tidigare som en variation av denna art. Taxonomiskt tillhör den sektionen Pardalopetalum. 

!Utseende
Det är en stor planta som kan bilda stora bistånd med mer än 15 rosetter. Varje rosett får fyra till sex stycken, upptill en halvmeter långsmala blad, som bara blir två till fem cm breda. Ovansidan är mörkt grön och undersidan ljusgrön. Under september till november kommer en upptill 80 cm lång vertikal blomstängel som bär två till fem stycken blommor som kan bli 18 cm breda och 15 cm höga. Den dorsala sepalen är vit med gröna nerver mot basen och synsepalen är blekt gulgrön eller grönaktig vit med mörkare gröna nerver. De skruvade petalerna är gröna med markeringar i ljusbrunt och med en gulbrun läpp streckad i mörkare brunt. Staminoiden är vit med en mörkgrön mitt. 

!Skötsel
Dess naturliga habitat är insvept i kraftig dimma under senvintern och våren, i kraftiga regn under sommaren, och med en uttalat torrare period under hösten och vintern.
Plantan bör odlas i ljus skugga och intermediär temperaturer, den föredrar mer ljus än många andra inom släktet. Odla i en väldränerad mix av medelgrov bark, perlit och sphagnum. Vattna regelbundet ungefär var fjärde till var femte dag. För att inducera blomning behövs en period med minskad vattning och lägre temperatur vinterntid.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum parishii// var. //dianthum// K.Karas. & K.Saito (1982)
__Heterotypic Synonyms:__
//Paphiopedilum dianthum// f. //album// O.Gruss (2003)
//Paphiopedilum aranianum// Petchl. (2009)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphdianthum.htm]] 2015-04-23
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_dianthum]] 2015-04-23
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/dianthum/index.html]] 2015-04-23
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=200028787]] 2015-04-23
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/3d-dianthum/dianthum-spin.html]] 2015-04-23




































!Allmänt och utbredning
Släktet innehåller <$view field="count"/> accepterade arter som växer epifytiskt i fuktiga molnskogar från södra Mexiko och Costa Rica till Venezuela och Peru mellan 2500 och 3200 meters höjd.
Släktet //Fernandezia// beskrevs av Ruiz och Pavon (1794) utan att utse en typart. Det gav upphov till ett taxonomisk problem i många år och några av dess arter klassificeras som //Centropetalum//, //Nasonia// och //Pachyphyllum//. Garay och Dunsterville (1972) valde //[[Frnndz. subbiflora|e201619a-ae65-497f-a0cf-b3e27b40143b]]// som typart och de gav //Centropetalum// och //Nasonia// status som synonym till //Fernandezia//. De föreslog också en uppdelning av //Fernandezia// i två undersläkten baserat på polliniernas struktur. Undersläktet //Nasonia// präglas av att ha ett enda märke, och det nominella undersläktet genom att ha två separata. De är nära besläktade med //[[Dichaea|2fae9303-cfc0-47be-8a70-a06856f48698]]// och ganska ovanliga i odling. De ljust färgade blommorna tyder på pollinering av kolibrier. 
//Fernandezia// namngavs för att hedra den spanske botanikern och läkaren dr Gregorio Garcia Fernández.

!Utseende
De är små miniatyrarter som sällan blir över 15 cm höga med sammangyttrade, monopodialt upprätta plantor utan pseudobulber. De läderartade bladen kommer alternerande i två rader längs de tjocka stammen. Blomstängeln är kort med en eller två blommor och med bara en blomma öppen i taget. Blommorna blir mellan en och tre cm stora i klara färger rött, orange eller gult.

!Skötsel
De bör odlas svalt till intermediärt under full sol med bara skydd för den starkaste middagssolen. Vattna ungefär en gång i veckan under sommaren och minska till en gång i veckan under vintern. De kommer från områden högt uppe i Anderna och behöver konstant fukt och hög luftfuktighet.
De kan med framgång odlas monterad eller i en kruka med väldränerad, grov barkkompost och perlite.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Maxillarieae
''Undertribus'': Oncidiinae

''Typart''
//[[Frnndz. subbiflora|e201619a-ae65-497f-a0cf-b3e27b40143b]]// Ruiz & Pav. (1798)

''Uttal''
fer-nan-DE-zi-a

''Synonymer''
__Heterotypic Synonyms:__
//Pachyphyllum// Kunth (1816)
//Centropetalum// Lindl. (1838)
//Nasonia// Lindl. (1845)
//Orchidotypus// Kraenzl. (1906)
//Raycadenco// Dodson (1989)

!Rekommenderad läsning
[[Orchids-World|http://www.orchids-world.com/genera/fernand.html]]

;Ron Parson, Mary E. Gerritsen, 2013,
://A compendium of miniature Orchid Species//, volume 1, Redfern Naturhistoriska Productions Ltd, Storbritannien, ISBN 978-1-908787-19-4

;Rebecca Tyson Northen, 1996,
://Miniature Orchids and How to Grow Them//, Dover Publications Inc., USA, ISBN 0-486-28920-6




























!Allmänt och utbredning
//Ercn. pusilla// växer från Nicaragua till Peru, Trinidad och Venezuela som en vanligt förekommande miniatyrepifyt på träd och buskar. Den växer företrädelsevis i betesmark, kaffeplantager och varma, fuktiga skogar mellan 500 och 950 meter över havet.

!Utseende
Den har lansettlika köttiga blad i ett solfjäderformigt bladverk som är tillplattat från sidan. Blommorna kommer under hösten till våren, en och en på korta blomstjälkar. Blommornas halvannan cm är relativt stora i förhållande till plantan i övrigt, och är klart gula med rödbruna fläckar på petalerna.
Den har rapporterats kortlivad i naturen, med bara fem till åtta år. I odling kan den antagligen bli äldre. Trots den ganska korta livslängden anses arten som den mest långlivade inom släktet.

!Skötsel
Den växer bäst monterad på kork under varma förhållanden. Den vill ha en ljus växtplats utan direkt solsken. Arten blir snabbt blomstor och kan blomma redan ett år efter frösådd.

!Synonymer
__Homotypic Synonyms__
//Epidendrum pusillum// Linnaeus (1763)
//Cymbidium pusillum// Swartz (1799)
//Oncidium pusillum// Rchb.f. (1863)
//Tolumnia pusilla// Hoehne (1949)
//Psygmorchis pusilla// Dodson & Dressler (1972)
__Heterotypic Synonyms__
//Oncidium iridifolium// Kunth (1816)
//Epidendrum ventilabrum// Vell. (1831)
//Oncidium allemanii// Barbosa Rodrigues (1881)
//Psygmorchis allemanii// Garay & Stacy (1974)
//Erycina allemanii// Williams & Chase (2001)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/psygpusilla.htm]]
[[OrchidsOnline|http://www.orchidsonline.com.au/species1475.html]]














































!Allmänt och utbredning
Arten som är en varmväxande epifyt från regnskogarna i Indonesien, Malaysia, Borneo, Java och Sumatra är förvånansvärt härdig och förekommer mellan 700 och 2000 meters höjd.
Undergruppen ''Speciosae'', som //Coel. speciosa// tillhör, innehåller 16 mycket nära besläktade arter med många underarter och varianter.
Artnamnet //speciosa// anspelar på den stora och spektakulära blomman.

!Utseende
De ovala pseudobulberna som kommer tätt tillsammans bär i toppen ett eller två avlånga blad som kan bli 35 cm långa. 
Blomstänglarna kommer från toppen av den kommande bulben, vanligast under vår eller sommar men den kan blomma när som helst under året. Stängeln blir drygt åtta cm lång och bär ett fåtal, åtta cm stora blommor som öppnas efter varandra och är utslagna under flera veckor. Blommorna har en svag doft av mysk. Blomman varierar mycket i färg och form men påminner om en stor, flygande insekt. Färgen varierar från ljust gulgrönt till laxrosa med en rödbrun läpp.

!Skötsel
Det är en i handeln vanligt förekommande art som är lättodlad och attraktiv. Den klarar både intermediära och varma förhållanden men utsätt den inte för frost och håll den fuktig under tillväxtperioden så växer den snabbt till en rejäl planta på bara fyra, fem år.
Ge den en ljus halvskugga och hög luftfuktighet. Under vintern kan den få torka upp lätt mellan vattningarna och kan då odlas i full sol.
Eftersom arten kommer från ett område med monsunregn hänger blommorna nedåt för att undvika att vatten sköljer pollinierna mot det egna märket och orsakar självpollinering. Därför är det fördelaktigt med odling i en hängande kruka eller korg så blommorna kommer till sin rätt.

!Synonymer
__Homotypic Synonyms:__
//Chelonanthera speciosa// Blume (1825)
//Pleione speciosa// Kuntze (1891)

!Rekommenderad läsning
[[Coelogynes.com|http://coelogynes.com/Species%20Coel%20speciosa.html]]
[[Internet Orchid Species Photo Encyclopedia|http://orchidspecies.com/coelogynespeciosa.htm]]























!Allmänt och utbredning
Arten som är endemisk för Filippinerna växer som en liten epifyt eller litofyt upp till 1000 meters höjd.
Artnamnet kommer av staden Nymphenburg, Tyskland, där Munich Botanical Garden är belägen. De förväxlas ofta med //[[Bulb. trigonosepalum|ed67cfa1-3468-4745-86d3-af0b411ec7e7]]// och //[[Bulb. levanae|05934ca2-3975-4ee2-a381-85a0689ebba1]]// som ser mycket lika ut, men med större blommor.

!Utseende
De fem cm stora pseudobulberna är ovalt runda och bär ett ensamt avlångt, läderartat, blågrönt blad som kan bli upptill 20 cm långt. Under sommaren kommer de fem till tio cm långa blomstänglarna från basen av bulben. De bär upptill fyra illaluktande blommor som öppnas successivt. De stjärnformade blommorna blir fyra cm stora och luktar som ruttnande kött om man kommer för nära. Sepaler och petaler är rödbruna med en glänsande, mörkröd läpp.

!Skötsel
Den odlas bäst under varma, fuktiga och skuggiga till halvskuggiga förhållanden med god luftväxling. Ge 20000 till 30000 lux.
Det verkar som de framgångsrikt kan odlas i hydrokultur, eller i grunda lerkrukor med sphagnum och tre till fem vattningar i veckan.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbnymphopolitanum.htm]]
[[The Beauty of Orchids & Flowers|http://www.orchids-flowers.com/orchids/bulbophyllum-nymphopolitanum-kraenzl-1916/]]

















































!Allmänt och utbredning
//Paph. parishii// [paf-ee-oh-PED-i-lum PAR-ish-ee-eye] är en epifytisk eller mer sällan terrestrisk art från provinsen Assam i Indien, östra delen av Myanamar/Burma, västra och norra delen av Thailand och den södra kinesiska provinsen Yunnan där den oftast påträffas i tjock mossa tillsammans med ormbunkar högt upp i stora träd mellan 1250 och 2200 meters höjd.
Arten är uppkallad efter sin upptäckare, pastor Charles Samuel Pollock Parish (1822-1897), en anglikansk missionär och orkidésamlare i 1800-talets Myanmar/Burma. Taxonomiskt tillhör den undersläkte Polyantha sektion Mystropetalum. Kromosomtalet är 2n=26.

!Utseende
Det är en medelstor art med fem till sju långa, smala, läderartiga helgröna blad, upptill 45 cm långa och fyra till åtta cm breda. Under vår och sommar kommer en upptill 60 cm lång blomstängel som kan bära mer än ett dussin blommor som alla är öppna samtidigt. Blommorna blir vanligen mer än tio cm stora. Den dorsala sepalen och synsepalen är gulgröna till gröna med mörkare längsgående nerver. Petalerna är ljust gulgröna med mörkt lila prickar mot basen. Läppen är gulgrön till grön, ibland med mörkare nerver. Staminoiden är vit med en mörkgrön centrumfläck.

!Skötsel
//Paph. parishii// behöver en skuggig placering, 12000 till 18000 lux, med jämn vattning och gödning hela året. Den växer i områden som får mycket fukt hela året om. Under torrperioden får de fukt i form av lätta duggregn, dimma och hög luftfuktighet, medan de under monsunregnen får ständiga, kraftiga regn. Eftersom de växer i mossa kommer underlaget vara något surt, men vattnet är vanligtvis rent regnvatten, och innehåller bara mycket lite mineraler och inget kalktillskott.
De tål höga temperaturer bra, och klarar temperaturer ner till strax över fryspunkten på vintern. Under sommaren kan temperaturen gå ner till tio grader under nätterna och upptill över 30 grader dagtid. Vintertid kan temperaturen variera mellan sju och 22 grader. Sommartid kan den med fördel stå utomhus.
De kräver svagare ljus än de flesta andra flerblommande arterna inom släktet och växer under liknande förhållanden som //[[Paph. haynaldianum|a8cf9c33-fd1e-43cb-9c6c-fa0efb8aa477]]//.
Plantera i en väldränerande mix med medelgrov barkkompost, perlit och vitmossa. Eftersom bladen blir så stora och tunga är det bra med en tung, bred kruka som inte välter så lätt. Vattna regelbundet ungefär var fjärde till var femte dag. Minska vattningen och sänk temperaturen under två till tre veckor vintertid för att inducera blomningen.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium parishii// Rchb.f. (1869)
//Selenipedium parishii// Jolibois (1885)
//Cordula parishii// Rolfe (1912)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphparishii.htm]] 2015-06-03
[[The Gore Orchid Conservatory|http://www.goreorchids.com/SpecPgs/Paph-parishii.html]] 2015-06-03
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/polyantha/parishii/index.html]] 2015-06-03
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_parishii]] 2015-06-03
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242335746]] 2015-06-03

;Robert D. Donovan, Joseph Arditti, Irwin P. Ting, 1984
://Carbon Fixation by //Paphiopedilum insigne// and //Paphiopedilum parishii// (Orchidaceae)//, Annals of Botany 54, 583-586, 1984
:http://vignette3.wikia.nocookie.net/orchids/images/a/a8/Carbon_Fixation_by_Paphiopedilum_insigne_and_Paphiopedilum_parishii.pdf/revision/latest?cb=20091018223958&path-prefix=en












!Allmänt och utbredning
Denna småväxta arten växer som en hängande epifyt under svala till varma förhållanden på låga höjder i bergsområden från Mexiko och söderut genom Guatemala, Costa Rica, Honduras, Nicaragua och El Salvador till Panama.

!Utseende
Arten växer med hängande, hoptrasslade stammar som kan bli 15 cm långa och saknar pseudobulber. Växten påminner om en tusenfoting, med små, korta blad i två rader i ett plan, som knappt sticker ut från stammen. Bladen är mörkgröna eller i lila nyanser. De korta, tunna rötterna kommer längs hela stammen.
Den fyra mm korta blomstängeln bär under maj till juni en eller två små blommor som blir drygt en cm i diameter och bara håller ett par dagar. Sepaler och petaler brukar vara vita eller ljust gula med lila eller bruna inslag på den övre tredjedelen mot basen. Läppen är mer eller mindre helt violett. Blomman har en stark doft av vanilj.

!Skötsel
Plantan växer epifytiskt på grenar och stammar på träd i bergsområden. De har ett hängande växtsätt som bäst kommer till sin rätt monterade men är fullt möjlig att även odla i en låg och vid kruka eller skål.
Ett svalt, halvskuggigt läge utan direkt solljus men med hög och framförallt jämn luftfuktighet och god luftcirkulation är fördelaktigt. Den kan inte fördra långvarig torka utan vill ha jämn vattning och gödning året om. Sommartid trivs den bra utomhus om luftfuktigheten kan hållas uppe. Den kräver då daglig vattning. Vintertid räcker det med regelbundna duschar under en kort period av vila med en nattemperatur ner till 15 grader.

!Synonymer
__Heterotypic Synonyms:__
//Dichaea suaveolens// Kraenzl. (1923)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dichsquarrosa.htm]]























!Allmänt och utbredning
Det är en relativt nyupptäckt litofytisk art från ett litet område i Kina och norra Vietnam där den växer skuggigt och fuktigt på kalkstensklippor mellan 450 och 760 meters höjd. Den kända utbredningen av //Paph. hangianum// sträcker sig från cirka 75 km sydost om Malipo i Vietnam till cirka 45 km sydost om den kinesiska gränsen i nordöstra Tuyen Quang och nordväst Bac Kan. Arten är mycket vanlig inom detta område men har ingen annan känd utbredning.
Den är uppkallad efter fru Tong Ngoc Hang, en vietnamesisk orkidéodlare som exporterade de första exemplaren. Det vietnamesiska efternamnet Hang bygger på Hang Nga, den mystiska månenälvan som sägs att bo i ett palats på månen, en passande analogi i form och färg. Av utseendet på blad och blommor är det klart att den är nära besläktad med //[[Paph. emersonii|388ba681-7b1e-4af3-ba80-56e6b569d94b]]//. Taxonomiskt tillhör den undersläktet Parvisepalum sektionen Emersonianum.

!Utseende
Det är en kompakt, medelstor art med fyra till sju långsmala, hängande, tolv till 30 cm långa och tre till fem cm breda, klargröna blad. Undersidan av bladen är ljusgröna och saknar helt den rödaktig pigmentering vid bladbasen som annars är så vanlig hos släktet. Bladens undersida är också försedda med en tydlig köl. Under våren kommer en knappt decimeterlång blomstängel som bär en ensam, mer sällan två, väldoftande, upptill tolv cm stor blomma. Blommorna är runda, nästan lika höga som breda, elfenbensvita till ljust gröngula och mörknar i färg dagarna efter att blomman slagit ut. Mot basen av petalerna är de överdragna med rosa eller rödbrunt. Läppen är jämn i färgen på utsidan men översållad av purpurprickar på insidan. Staminoiden är mycket stor, i storlek som en tumnagel. Hela blommans yta, med undantag för staminoden, är täckt av mycket korta hårstrån vilket resulterar i ett sammetsliknande utseende av blomman. Eftersom blomstängeln är kort och blomman är stor behövs ofta ett stöd för att hålla blomman upprätt.

!Skötsel
I sitt naturliga utbredningsområde utsätts den för torra, kalla vintrar från november till mars och blöta, varma somrar. Den bör ges en ljus skugga utan direkt sol och intermediära temperaturer. Odla i en mix av medelgrov barkkompost och perlit. Minska vattningen och sänk temperaturen till cirka fem grader under vintern för att inducera blomningen. Plantan växer mycket långsamt.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum singchii// Z.J.Liu & J.Y.Zhang (2000)
//Paphiopedilum hangianum// f. //album// O.Gruss & Petchl. (2002)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphhangianum.htm]] 2015-05-16
[[Orchids Wiki|http://orchids.wikia.com/wiki/Paphiopedilum_hangianum]] 2015-05-16
[[Slipperorchids.info|http://www.slipperorchids.info/paphdatasheets/parvisepalum/hangianum/index.html]] 2015-05-16
[[nonghoc|http://nonghoc.com/show-article/13849/the-moon-slipper-paphiopedilum-hangianum.aspx]] 2015-05-16





!Allmänt och utbredning
Denna lilla litofyt återfinns i öppen terräng på nakna klippor och i klippskrevor mellan 1000 och 2700 meters höjd i kinesiska Himalaya, Myanmar och den indiska provinsen Assam.
Artnamnet betyder på latin "som en tiger" efter blommornas tigerrandiga blommor.

!Utseende
Den har ett kompakt växtsätt och hela plantan blir bara 15 cm stor. De fem cm stora, ovala till koniska pseudobulberna liknar dem hos //[[Coelogyne|1ea3d8e4-b96f-497b-902b-8b43537ed31b]]// med tre till fem långsmalt ovala blad från toppen. Den två dm långa blomstängeln höjer sig ovanför bladen och kommer under våren eller försommaren från basen av bulben. Stängeln bär upptill sex stycken, åtta cm stora, honungsdoftande blommor. Sepaler och petaler är gulgröna med rödbruna nyanser och purpurfärgade prickar mot basen. Läppen är vit med purpurbruna nyanser på de laterala flickarna och rödbruna markeringar. Efter pollinering ändras grundtonen till rosa.

!Skötsel
Den är inte svår att odla men kan vara lite besvärlig att få att blomma eftersom den inte tycker om att stå varmt, helst inte över 26 grader. I naturen växer den svalt, så ge den åtminstone en sval och torr vinter med full sol. De behöver viss vattning under vintern men om den får för mycket vatten kommer blomstänglarna förtvina. Från november och fram till mars räcker det med lätta sprayduschar. I sitt naturliga habitat kommer det mellan december och mars drygt en cm regn per månad.
Sommartid kan den gärna stå utomhus, med skuggning för den hetaste delen av dagen och mycket vatten.
Odlas med fördel i vanlig kompostmix. Den föredrar att planteras lite högre upp i krukan än andra //[[Cymbidium|96a115b4-bf33-4e6d-beb6-529e665f3585]]//.

!Synonymer
__Homotypic Synonyms:__
//Cyperorchis tigrina// Schlechter (1924)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://orchidspecies.com/cymtigrinum.htm]]
[[Cymbidium Species|http://www.cymspecies.com/tigrinum.htm]]
[[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=250092668]]
[[Primarily Cymbidiums|http://primarilycymbidiums.blogspot.se/2010/04/cym-tigrinum-hybrids.html]]














!Allmänt och utbredning
Arten växer invid floder i skuggan under små lövfällande träd eller buskar, nästan helt gömd i de höga gräsen på kalkstensklippor i Shan Plateau i Myanmar, Khorat Plateau i nordvästra Thailand och Yunnan i sydvästra Kina. Där växer de i tjocka lager av porös, halvt nedbruten lövkompost under lätt skuggiga förhållanden mellan 300 och 1600 meters höjd.
Den brittiske befälhavaren R.Moore för Fort Stedman i södra delarna av Shan States, Burma (nuvarande Myanmar), vid stränderna av Lake Inle, fann ett exemplar som skickades till firman Messrs Low & Co i England. Den beskrevs sedan av Reichenbach 1888 som noterade likheten med //Paph. godefroyar//.

!Utseende
Den mediumstora, ganska kompakta plantan får blad som blir upptill 15 cm långa och fem cm breda. Dessa är mörkt gröna och kraftigt mönstrade på ovansidan och mer eller mindre helt purpurflärgade på undersidan.
Den korta, upprätta eller hängande blomstängeln bär en, eller i sällsynta fall, två blommor alldeles ovanför, eller ofta vilande på, bladverket. De stora, runda blommorna blir upptill åtta cm tvärsöver. De har en vit botten, översållad med stora, vinröda prickar. I sitt naturliga habitat kommer blommorna vid början av den regniga säsongen under våren.
//Paph. bellatulum// har används flitigt i hybridisering för den stora, runda läppens skull.

!Skötsel
Det är en av de svåraste papharna att odla, inget att inleda med som nybörjare. I odling kan den blomma rikligt om den erbjuds svala förhållanden, speciellt under nätterna. Den behöver en svalare växtplats än de flesta andra arterna inom släktet.
Plantan föredrar en porös, luftig barkkompost med en fjärdedel kalkstensgrus. Använd alltid små krukor vid omplanteringarna, en stor kruka som är konstant fuktig är dödsdomen för alla paphar av sektionen ''Brachypetalum''.
Planteringen kan med fördel vänta tills kompostens nedbrytning fastställer att det är dags, växten bör störas så lite som möjligt. Vid planteringen placera plantan lite högre upp i komposten än vanligt. Den nya tillväxten ruttnar lätt om den kommer för djupt ner i en fuktig kompost.
Den behöver en placering i ljus skugga och hög luftfuktighet med god luftcirkulation. I naturen skuggas de under sommaren av buskar som vintertid tappar alla sina blad och ger plantan allt tillgängligt ljus. Samtidigt hjälper den lägre temperaturen och vinden bladen från att bränns. Om den står alltför ljust tenderar bladen att rulla ihop nedåt över kanten på krukan. Den huvudsakliga tillväxten sker under sommaren.
En vintervila är viktig för att odla starka plantor. Vattna underifrån och var försiktig att inte ge för mycket vatten, speciellt vintertid. I naturen kommer då den enda fukten från det vatten som lagrats i leran och kondensationen från den nattliga dimman. //Paph. bellatum// är mycket känslig för salter i vattnet eller saltuppbyggnad i komposten, gödsla endast med svag dos och relativt sällan.

!Synonymer
__Homotypic Synonyms:__
//Cypripedium bellatulum// Rchb.f. (1888)
//Cordula bellatula// Rolfe (1912)
__Heterotypic Synonyms:__
//Paphiopedilum bellatulum// var. //album// O´Brien (1896)
//Paphiopedilum bellatulum// f. //album// Braem (1998)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphbellatulum.htm]]
[[BurleighPark Orchids|http://www.speciesorchids.com/PaphiopedilumBellatulum.html]]
[[Australian Orchid Council|http://www.orchidsaustralia.com/Paph_bellatulum.htm]] mkt utförlig








































































































!Allmänt och utbredning
Det är en litofytisk eller epifytisk miniatyrart som är endemisk för ett litet område i naturreservatet Pico Codazzi National Monument i norra Venezuelas molnskogar mellan 1600 och 2400 meters höjd.
Arten är uppkallad efter den stad, Tovar, i delstaten Aragua i vars närhet den först hittades. Den kallas i bland "Julorkidé" då den vanligen blommar runt jul. Taxonomiskt tillhör den undersläkte Polyantha sektion Alaticaules undersektion Alaticaules.

!Utseende
De upprätta bladskaften är vid basen omsluten av två eller tre tunna bladskidor. Skaftet utvidgas i toppen till ett enda, köttigt, glänsande grönt blad, ovalt med en utdragen spets. Under senhösten eller vintern kommer från bladskaftens bas en upprätt, åtta till 18 cm lång blomstängel som höjer sig över bladen och bär två till fyra samtidigt öppna blommor. Blommorna är vaxaktigt snövita och håller under flera månader. Så länge blomstängeln är grön och frisk kan den bilda nya blommor senare under det nya året.

!Skötsel
Den är helt svalväxande art som föredrar en ljus skugga och jämt fuktig, inte blöt, kompost hela året. Vintertid kan den behöva vattning en gång i veckan eller mer sällan, men dagliga duschar varje morgon istället. Använd vatten av bra kvalité, gärna R/O eller regnvatten. Den behöver en ordentlig temperatursänkning under nätterna, gärna åtminstone tio grader, hög luftfuktighet och mycket god luftcirkulation. Plantera om på våren efter blomningen i lerkrukor med ren, väldigt löst packad sphagnum eller en väldränerad kompost av fin bark och ett lager leca i botten. Om den bildar bruna ringar runt bladskaftet kan det vara ett tecken på att den står för varmt.

!Synonymer
__Homotypic Synonyms:__
//Alaticaulia tovarensis// Luer (2006)
__Heterotypic Synonyms:__
//Masdevallia candida// Klotzsch & H.Karst. (1854)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/mastovarensis.htm]] 2015-08-03
[[OrchidKarma|http://orchidkarma.com/it-is-tovarensis-season-again/]] 2015-08-03












!Allmänt och utbredning
Det är en krypande epifytisk, eller mer sällan terrestrisk miniatyrart från de svala, fuktiga molnskogarna på Jamaica, Cuba, Hispanola, Colombia, Ecuador, Peru och Bolivia där den växer på träd, stockar eller klippiga skogarmellan 400 och 1300 meters höjd.
Namnet kommer från latinets ''atropurpureus'' som betyder "mörkt purpur" efter blommans färg.

!Utseende
Den saknar pseudobulber utan bladstjälkarna kommer direkt från en underjordisk stam. De korta, upprätta stjälkarna är vid basen omslutna av flera tunna täckblad och bär i toppen ett ensamt ovalt, utdraget spetsigt, blad. Från sensommaren till vintern kommer från bladfästen en kort, kortare än bladet, blomstängel som bär en ensam, doftlös, djup lila blomma under upptill en vecka. De två cm stora blommorna är nästan helt slutna vilket ger ett säreget utseende.

!Skötsel
De behöver regelbunden vattning året om och en skuggig växtplats med hög luftfuktighet. Håll komposten fuktig men inte blöt. Använd vatten av god kvalité, gärna regnvatten eller R/O. Ge svag gödningsdos, hälften eller en fjärdedel av rekommenderad dos. Plantera den i en fin mix av barkkompost och perlite eller hackad sphagnum eller i ren, löst packad sphagnum. Starkt ljus eller otillräcklig luftcirkulation kan ge svarta fläckar på bladen.

!Synonymer
__Homotypic Synonyms:__
//Specklinia atropurpurea// Lindl. (1835)
//Pleurothallis atropurpurea// Lindl. (1842)
//Cryptophoranthus atropurpureus// Rolfe (1887)
//Humboltia atropurpurea// Kuntze (1891)
__Heterotypic Synonyms:__
//Masdevallia fenestrata// Hook. (1845)
//Cryptophoranthus schenckii// Cogn. (1906 publ. 1907)
//Zootrophion schenckii// Luer (1986)
//Zootrophion fenestratum// Rysy (2009)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/zooatropurpureum.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Zootrophion_atropurpureum]]








!Allmänt och utbredning
Arten är endemisk för delstaten Tocantins i Brasilien där den växer epifytiskt mellan 395 till 610 meters höjd över havet.
Den har fått sitt namn efter floden Araguaia längs vilkens stränder den först upptäcktes.
Blommorna hos arten är så olika de hos andra arter inom släktet att den när den beskrevs 1967 först troddes vara en hybrid med någon från [[Brassavola|b098846e-ad91-4f83-b2e6-9fdbdc0cf091]].

!Utseende
Det är en liten epifyt med smala, spindelliknande pseudobulber som vanligen blir mindre än åtta cm långa. De bär ett ensamt, avlångt blad i toppen. Under senvåren till mitten av sommaren kommer en kort blomstängel med en enda, tio cm stor blomma som håller i flera veckor. Blommorna är olika alla andra blommor inom släktet då sepaler och petaler är lika, långsmala och bronsfärgade. Läppen är oproportionellt stor, lång och rörformad, i vitt och med en mörkt rosa eller brungrön fläck på yttersta spetsen. Blommorna har även den utmärkta egenskapen att ha en mycket angenäm doft.

!Skötsel
De växer under varma och fuktiga förhållanden, gärna i ganska små krukor. Om de trivs kan de bilda flera nya bulber under en enda säsong och blomma från varje bulb. De växer naturligt i en miljö som inte varierar speciellt mycket. Nattemperaturen varierar vanligen mellan 17 och 20 grader över året och dagstemperaturen runt 27 grader, men i odling verkar den kunna tolerera större variation. De verkar föredra en ljus växtplats med god luftcirkulation och i en liten kruka med luftig, medelgrov barkkompost, två eller tre vattningar i veckan.

!Synonymer
__Homotypic Synonyms:__
//Brassocattleya araguaiensis// H.G.Jones (1972 publ. 1973)
//Cattleyella araguaiensis// Van den Berg & M.W.Chase (2004)
//Schluckebieria araguaiensis// Braem (2004)
__Heterotypic Synonyms:__
//Cattleya araguaiensis// var. //alba// L.C.Menezes (1991)
//Cattleya araguaiensis// f. //alba// Christenson(1996)
//Cattleyella araguaiensis// f. //alba// Van den Berg & M.W.Chase (2004)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/cataraguensis.htm]] 2015-01-09
[[Chadwik & Son Orchids|http://www.chadwickorchids.com/araguaiensis]] 2015-01-09
[[Cattleya Source|http://cattleya.wikidot.com/cattleya-araguaiensis]] 2015-01-09
[[Oregon Orchid Society|http://oregonorchidsociety.org/miranda/CATTLEYA/Slide24.htm]] 2015-01-09
[[Orchids Wiki|http://orchids.wikia.com/wiki/Cattleyella_araguaiensis]] 2015-01-09






































































































































!Allmänt och utbredning
//Angcm. sesquipedale// är endemisk för de östra delarna av Madagaskar, där den föredrar att växa på träd i kanterna av fuktig låglandsskog från havsnivå upp till 100 meters höjd. Vanligtvis finner man den växande på träd med färre blad och på de torraste områdena av trädstammen. Det ger plantan maximalt med sol och luftcirkulation. Plantor som växer fyra till sex meter från marken är oftast större än exemplar som återfinns högre upp i trädkronorna. Vanligen växer den som epifyt i stora klumpar på trädstammar, men ibland även litofytiskt på klippor eller rentav semiterrestriskt.
Arten upptäcktes så tidigt som 1798 av den franske botanisten [[Louis-Marie Aubert du Petit-Thouars|http://sv.wikipedia.org/wiki/Louis-Marie_Aubert_du_Petit-Thouars]] men beskrevs först 1822. 
Hos insektspollinerade orkidér finner man ofta de mest bisarra lösningar för att locka till sig rätt pollinatör. Den elfenbensvita stjärnan från Madagaskar är inget undantag. Den har en extremt lång sporre som hänger ned från bakre delen av läppen. Nektarn i spetsen når bara en höjd av maximalt fyra cm. 
Arten är mest känd för Charles Darwin som 1822 i sin bok ''On the various contrivances by which British and foreign orchids are fertilized by insects'' förutsade att orkidén måste pollineras av en hittills okänd fjäril med en sugsabel av aldrig tidigare skådad längd, lika lång som sporren och som dessutom med kraft att trycka ned den i botten. Först 1903, 21 år efter Darwins död, upptäckte man den svärmare som nattetid pollinerar blommorna och gavs namnet //Xanthopan morgani// ssp. //praedikta//. ''Praedikta'' betyder just "den förutsagda" och hänvisar till Darwins förutsägning.
Det latinska ''sesquipedale'' som betyder "en-och-en-halv-fot" anspelar på avståndet mellan blommans allra översta topp på den dorsala sepalen och till spetsen av den extremt långa nektarsporre. I England kallas den ofta kometorkidé, men andra namn är madagaskarstjärna, stjärnorkidé eller Betlehems stjärna, då den ofta blommar vid jultid.
Kromosomtalet för //Angcm. sesquipedale// är 2n=42.

!Utseende
Plantan kan bli upp till en meter hög och växer monopodialt. I sitt växtsätt påminner den om arterna inom släktet [[Aerides|d01626a4-8bb7-4628-b00d-08662f76df45]]. De läderartade bladen som är mörkgröna med en gråaktig ton blir upptill fyra dm långa och sex till åtta cm breda. De har en grunt kluven bladspets och sitter tätt placerade längs en upprätt stam. Från stammen växer också kraftiga, mörkgråa luftrötter. Det blir inte så många av de köttiga rötterna men de binder hårt mot trädstammen och kan bli flera meter långa.
Blomstängeln är kortare än bladen, vanligen under tre dm lång, och bär två till sex doftande blommor som kan hålla två eller tre månader. Flera blomstänglar kan också blomma samtidigt. I naturen kommer blommorna mellan juni till september men i odling i Europa är det vanligare att blomningen infaller i december och januari.
De stjärnformade blommorna är vanligen mer än tolv cm i diameter. Läppen är försedd med en imponerande gulgrön sporre som kan bli upp emot 40 cm lång varav bara de nedersta två till fyra cm innehåller mellan 40 till 300 ál nektar. Färgen på blomman är först grönvit, senare cremevit och slutligen gulnar den för att övergå till orange eller brunt när den börjar vissna. Andelen grönt i blomfärgen kan variera från planta till planta. Sepalerna behåller den gröna färgen längre än petalerna. Antagligen är den åldersberoende färgen mer uttalad på vilda exemplar än plantor odlade i växthus. Blomman har en intensiv, kryddig doft som är särskilt stark nattetid och lätt fyller ett helt rum. Doften har en kemisk sammansättning av ungefär 39 olika substanser.

!Skötsel
//Angcm. sesquipedale// betraktas som ganska lättodlad, men den är känd för att tillväxa långsamt. Den behöver dock inte vara fullväxt för att blomma. 
Det rekommenderas att den odlas som //[[Cattleya|c87b994a-eb5b-416b-9748-860053e0dde3]]//, varmt, fuktigt och så ljust som möjligt utan att bränna bladen, 25000 till 35000 lux, året om. På fönsterbrädan rekommenderas ett ljust östfönster eller lätt skuggat sydläge. 
I dess naturliga habitat förekommer inga torrperioder utan plantan har en kontinuerlig tillväxtperiod med kraftiga regn året om. Den årliga genomsnittsnederbörden ligger runt fyra meter per år! Under aktiv tillväxt behöver en jämn, riklig vattning med svag gödning. Den frodas om den får en riklig luftcirkulation. Under blommningen och vintern kan den hållas lite torrare, med mindre vatten och gödning.
För att främja en ordentlig blomning behöver den som mest ljus mellan september till november. Antalet blomstänglar är beroende av antalet nya bladpar under föregående vår och sommar eftersom varje nybildar bladpar skickar ut en, eller mer sällan två, blomstänglar. Oftast ser man den i tropiska växthus, då den blir lite väl stor att ha i fönstret, där luften också oftast är för torr. Nattemperaturen bör inte gå under 18 grader, på dagen kan den sommartid få gå upp emot 30 grader.
Bäst odlas den i korg, där plantan kan få fritt spelrum för sina luftrötter. Plantera om vartannat år eller när komposten brutits ner. Rötterna är känsliga för att störas. Är de fastväxta i korgen kan man vid omplantering försiktigt lossa det gamla materialet och ersätta det med nytt. Detta bör vara en porös epifytkompost, lämpligen bestående av grov bark, träkol, boklöv och vitmossa. Vänta med första vattningen en vecka till tio dagar efter omplanteringen, då hinner rötterna läka och är inte lika känsliga för röta.
Under aktiv tillväxt behöver den vattnas rikligt, vintertid något mindre. Svag gödning kan ges under växtperioden.

!Synonymer
__Homotypic Synonyms:__
//Aeranthes sesquipedalis// Lindley (1824)
//Macroplectrum sesquipedale// Pfitzer (1889)
//Angorchis sesquepedalis// Kuntze (1891)
//Mystacidium sesquipedale// Rolfe (1904)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/angsesesquipe.htm]]
[[Wikipedia|http://sv.wikipedia.org/wiki/Madagaskarstj%C3%A4rna]] svenska
[[Wikipedia|http://en.wikipedia.org/wiki/Angraecum_sesquipedale]] engelska
[[The Alfred Russel Wallace Website|http://wallacefund.info/darwin-and-wallaces-predictions-come-true-0]]




















































!Allmänt och utbredning
De <$view field="count"/> arterna i //Cleistesiopsis// hör hemma i östra och sydöstra USA från New Jersey söderut till Florida och västerut till Kentucky och Louisiana. De föredrar savanner, ängar och öppningar i skogar, där jorden är sur och fuktig med hög andel ruttnande träd eller annat organiskt material.
Arterna ingick i det närbesläktade //[[Cleistes|ed35f1ff-edc4-4223-867c-1981a62300e9]]// till 2009. Även om båda släktena har rörformiga blommor, producerar inte de nordamerikanska arterna nektar utan erbjuder pollen som belöning eller förlita sig på bedrägeri för att locka pollinatörer.
I skrivande stund, december 2015, finns tre accepterade arter:
//[[Cleistesiopsis bifaria|426a2fca-d2fe-4cf1-b22e-58565510e2d6]]// Pansarin & F.Barros som återfinns från Virginia till Florida, västerut till Kentucky och Louisiana
//[[Cleistesiopsis divaricata|f193179c-0ca8-4607-9f04-750cc46e213a]]// Pansarin & F.Barros från New Jersey till Florida
och
//[[Cleistesiopsis oricamporum|0321bb07-4107-4d56-90f5-e7b45c36a4e1]]// P.M.Br. Louisiana till North Carolina.
//[[Cleistesiopsis divaricata|f193179c-0ca8-4607-9f04-750cc46e213a]]// och //[[Cleistesiopsis oricamporum|0321bb07-4107-4d56-90f5-e7b45c36a4e1]]// betraktades förr som två varianter av samma art men delades 2009 upp i två skilda arter. //[[Cleistesiopsis oricamporum|0321bb07-4107-4d56-90f5-e7b45c36a4e1]]// har kortare könspelare, en mindre läpp med fem till sju längsgående kölar och doftar vanilj. //[[Cleistesiopsis divaricata|f193179c-0ca8-4607-9f04-750cc46e213a]]// sägs dofta påsklilja och har en nästan dubbelt så stor läpp med en till tre kölar.
Släktnamnet //Cleistesiopsis// betyder "ser ut som Cleistes".

!Utseende
//Cleistesiopsis// är ett terrestrisk släkte med ett underjordiskt nätverk med utspridda, fibrösa rötter. De förökar sig asexuellt genom att rötterna skickar ut nya skott och kan med tiden bilda stora, täta bestånd. Under våren mellan april till juni bildar de små kluster av enstaka blommande stjälkar, var och en med en enda blad blad ungefär halvvägs upp på den 30 till 45 cm långa stammen. Ett mindre stödblad sitter runt basen av blommorna och ser ut som ett andra, mindre blad. Varje stam kan producera upptill tre stycken blommor, två till tre cm stora beroende på art. Blommorna har tre brungrön, upprättstående sepaler. De två övre petalerna och läppen bildar en tubformad blomma, ljust rosa eller vit med rosa eller purpurfärgade sträck på läppen.

!Skötsel
Arterna kräver konstant fuktig jord, låt dem inte torka ut mellan vattningarna. Behovet av vatten är mycket högt vilket gör dem lämpade för odling i ett trädgårdskärr.

!Taxonomi
''Underfamilj'': Vanilloideae ''Tribus'': Pogonieae ''Undertribus'': N/A

----
''Typart''
//[[Cleistesiopsis divaricata]]// Pansarin & F.Barros (2008 publ. 2009)

----
''Uttal''

----
''Synonymer''
N/A

!Rekommenderad läsning
[[Wikipedia|https://en.wikipedia.org/wiki/Cleistesiopsis]] 2015-12-11
[[Go Orchids|http://goorchids.northamericanorchidcenter.org/genus/cleistesiopsis/]] 2015-12-11





































!Allmänt och utbredning
//Phrag. boissierianum// [frag-muh-PEE-dee-um boy-see-er-ee-AY-num] är endemisk för de fuktiga molnskogarna i södra Ecuador och Peru mellan 410 och 1400 meters höjd. Där växer de litofytisk på öppna sydvästsluttande kalkstensklippor som vid regn översköljs av regnet eller terrestriskt på leriga marker längs vägar eller på buskbeväxta grässluttningar vid kanten av regnskogen, ofta nära rinnande vatten.
Den är namngiven efter den schweiziska botanikern Edmund Boissier som var ägare till det exemplar som användes vid beskrivningen av arten. Det är en extremt variabel art med två accepterade varianter, //Phrag. boissierianum// var. //boissierianum// och //Phrag. boissierianum// var. //czerwiakowianum// O.Gruss (1995) som är en grönare form. Kromosomtalet är 2n=18.

!Utseende
Det är en av de största arterna inom släktet som bildar en rosett med 40 till 100 cm långa, två till fem cm breda, glänsande, helt mörkgröna blad. Rhizomen är korta och tjock och skotten kommer tätt tillsammans. Under hösten till våren kommer en blomstängel som kan bli mer än metern lång och en cm i diametern på kraftigaste stället. Den bär tre till 15 successivt öppna blommor som blir upptill 15 cm stora. Blomman verkar ha lätt för att självpollinera och många herbarium exemplar har frökapslar. När en //Phrag. boissierianum// blommar för första gången är blomman oftast grön med petaler och sepaler som inte är vridna. När plantan utvecklas blir blommorna mörkare och utvecklar lila toner längs nerverna, kanterna är vågiga och sepaler och petaler vridna. Läppen är grön med rostfärgade toner, bakre delen är ljust gulgrön med åtta till tolv gröna eller bruna fläckar.

!Skötsel
Ge den intermediära eller varma temperaturer hela året, mycket ljus utan direkt sol, hög luftfuktighet och jämn vattning med vatten av god kvalitét, låt den inte torka ut. Plantera i en väldränerad kompost med ett extra lager grovt grus, medelstora stenar eller leca i botten på krukan. Använd grov barkkompost med perlite eller sphagnum med tillsats av kalk.

!Synonymer
__Homotypic Synonyms:__
//Selenipedium boissierianum// Rchb.f. & Warsz. (1854)
//Paphiopedilum boissierianum// Stein (1892)
__Heterotypic Synonyms:__
//Cypripedium boissierianum// Rchb.f. & Warsz. (1854)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragboiserianum.htm]] 2015-09-29
[[Slipperorchids.info|http://slipperorchids.info/phragdatasheets/boissierianum/index.html]] 2015-09-29























































































































































!Allmänt och utbredning
Släktet //Catasetum//, förkortat //Ctsm.//, innehåller <$view field="count"/> accepterade arter och 15 naturhybrider. Arterna förekommer från Mexiko till Argentina och Västindien med den huvudsakliga utbredningen koncentrerad till Brasilien.
Ett karaktäristiskt särdrag är att de har skildkönade blommor och sporadiskt producerar två eller tre olika sorters blommor på samma planta och till och med på samma blomstjälk.
Släktnamnet kommer från det grekiska ''kata'' som betyder "nedåt" och det latinska ''seta'' som betyder "strå" och anspelar på de två tunna strån på könspelaren som utlöser att pollinierna slungas iväg och som är vända nedåt hos hanblommorna av de flesta arter.

!Utseende
De har tjocka, cigarrformade pseudobulber som växer tätt tillsammans och bildar åtta till tolv tunna, längsveckade blad som fälls under hösten. När bladen fällts får bulberna ett utdraget, spetsigt utseende. De upprätta eller hängande blomstänglarna kommer från basen av bulberna och bär köttiga, könliga blommor. De har alltså två olika slags blommor, han- och honblommor, något som är ovanligt hos orkidéer. De stora, färggranna hanblommorna och de mindre, gröngula honblommorna kommer vanligen på olika plantor, och vilken typ av blommor en planta producerar beror på dess växtbetingelser. I sällsynta fall kan en planta producera både han- och honblommor samtidigt. Skillnaderna i blommorna är så stora att fram tills Charles Darwin skrev sin bok "Fertilisation of Orchids" trodde taxonomer att det var skilda arter.
Hanblommorna karaktäriseras av att de kan slunga iväg sina polliner upptill tre meter! Efter pollinering mognar frökapseln under tre till fyra månader, innan den spricker och sprider sina frön för vinden. Sepaler och petaler har en fast, läderartad yta. Darwin beskrev hur den tropiska sydamerikanska arten //[[Ctsm. saccatum|445c114a-4544-46fc-bab3-6caf10b9f1b4]]// faktiskt slungar iväg sina pollinier med explosionsartad kraft när en insekt landar på blomman.

!Skötsel
I sina naturliga habitat växer de företrädesvis som epifyter i mycket fuktiga skogar. Alla arter har symbiotiska förhållanden med nedbrytande svampar. Många av arterna har ett saprofytiskt stadium som fröplantor, där de lever i nedbruten ved innan de bildar blad och börjar fotosyntetisera. De symbiotiska svampar som bryter ned ved behöver rikligt med kväve och det får de från orkidén. Catasetumarterna har därför ett stort behov av kvävehaltig gödning under tillväxten och många arter är kända för att gärna gro i myrbon högt uppe i trädkronorna. I utbyte mot kvävehaltig myrgödsel får myrorna uppehåll i plantorna.
De flesta arterna anses svåra att odla utan växthus och attraherar gärna myror även i odling. Vissa arter är omöjliga att odla och de flesta är mycket krävande. De tolererar inte torka och många har mycket speciella temperaturkrav.
Odla dem varmt och halvskuggigt med hög luftfuktighet. Under tillväxten kan ljusmängden sakta ökas till 30000 lux. I naturen kan temperaturen under dagen gå över 30 grader, och under natten ner till mellan 15 och 18 grader. När bulberna mognat bör temperaturen sänkas till runt 13 grader under natten och mellan 21 och 29 grader på dagen.
Under tillväxten kan de knappt övervattnas, så länge som komposten är väldränerad. Vattna ofta och regelbundet under tillväxtperioden fram tills bladen fälls, då minskas vattningen och luftfuktigheten. Övervintra dem torrt och svalt, vattna bara ungefär varannan vecka för att inte bulberna ska skrumpna. Vid övervattning under viloperioden är risken mycket stor att bulberna ska ruttna.  Viloperioden räcker från det att den nya tillväxten är helt klar tills de börjar växa igen, oavsett hur lång tid det tar. Under förutsättning att inga blomstjälkar framträder. I så fall ges vatten tills blommorna har blommat över och vissnat ner. En del odlare tar upp bulberna ur komposten för att förvara dem nästa helt torrt under vintern men om komposten har god dränering kan de stanna i krukan. Å;teruppta vattningen igen när den nya tillväxten kommer på våren.
Odla dem i en rik kompostmix av bark, perlite, sphagnum, kork och trädormbunke. Plantera om dem när den nya tillväxten kommit fram men innan de hunnit bilda nya rötter. De kan med framgång odlas i kruka, men korgar är att föredra.
För att få //Catasetum// att producera honblommor kräver en vuxen planta mycket direkt ljus och en låg luftfuktighet, hanblommorna kommer när plantan står skuggigare och med en hög luftfuktighet.

!Taxonomi
''Underfamilj'': Epidendroideae
''Tribus'': Cymbidieae
''Undertribus'': Catasetinae

''Typart''
//[[Ctsm. macrocarpum|f98ae198-1401-4811-b1ed-100cc83cfc0a]]// Kunth (1822)

''Uttal''
kat-a-SEE-tum 

''Synonymer''
__Homotypic Synonyms:__
//Cuculina// Rafinesque (1838) nom. superfl.
//Catachaetum// Hoffmansegg (1842) nom. superfl.
__Heterotypic Synonyms:__
//Monachanthus// Lindley (1832)
//Myanthus// Lindley (1832)

!Rekommenderad läsning
[[Wikipedia|http://en.wikipedia.org/wiki/Catasetum]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Catasetum]]
[[Orquideario Pueblo Nuevo|http://www.orquideariopueblonuevo.com/guia-de-cultivo/catasetum]] (spanska)
[[OrchideSpecies|http://www.orchidspecies.com/catasetum.htm]]
[[American Orchid Society|http://www.aos.org/Default.aspx?id=154]]





































































































































































!Allmänt och utbredning
Arten är endemisk för ett område längs Barito River i centrala Kalimantan på Borneo. Där växer den semiterrestrisk i mossa och lövkompost mellan stenar hängande ut över djupa flodbäddar, i lägre bergsskogar mellan 600 och 1100 meters höjd över havet.
Plantorna utmärker sig med att ha det största antalet blommor öppna samtidigt inom släktet.
Den är döpt efter Atmo Kolopaking, en berömd indonesisk orkidésamlare.

!Utseende
Det är en stor, varmväxande planta som får åtta till tio långsmala, klart gröna blad. Den blommar på våren mellan mars till juni, på en lång, hängande blomstängel som kan bli upptill sju dm lång och bära sex till 14 blommor. Det finns två former av arten, en med grön bakgrundsfärg på blomman och en som är mer ljust halmgul. Den ljusare form av arten har beskrivits som //Paph. topperi//, men de anses nu bara vara två snarlika former av samma art. Den grönare formen är vanligare i odling i Europa medan den gula formen är vanligast i USA.
Längs utsidan av läppens kant samlas en pudersockerliknade beläggning som lär stinka urin.

!Skötsel
Den växer bra under ljusa och tempererade eller varma förhållanden. I sitt naturliga habitat får den mycket diffust, reflekterat ljus. Skuggade plantor blommar sällan.
I naturen lever de i områden med mycket hög luftfuktighet och dessa områden är sällan eller aldrig helt torra. Den verkar vara lätt att få att tillväxa och blomma i odling. Den kräver en öppen, väldränerad kompost med bitar av mossa och grov bark. Placera den med ordentlig luftcirkulation och mycket ljus för maximal tillväxt och blomning.

!Synonymer
__Heterotypic Synonyms:__
//Paphiopedilum topperi// Braem & H.Mohr (1988)
//Paphiopedilum kolopakingii// f. //katherinae// Koop. (2007)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphkolopanking.htm]]
[[Phils OrchidWorld|http://www.angelfire.com/or3/orchidsnz/paph_mastigopetalum.htm#kalop]]




















































































































































































!Allmänt och utbredning
Den återfinns från Mexiko, Guatemala, Panama, Colombia, Ecuador, Peru och Venezuela mellan 800 och 2500 meters höjd där den växer litofytiskt, terrestriskt eller epifytiskt på öppna grässluttningar eller i fickor med fuktig mossa eller lövkompost på klippsidor nära rinnande vatten.
Namnet kommer från latinets ''caudatus'' som betyder "med svans" efter de extremt långa petalerna. Taxonomiskt tillhör den sektionen Phragmipedium. Kromosomtalet är 2n=28.

!Utseende
Det är en av de största arten inom släktet, som bildar en rosett med fem till sju långsmala, klargröna blad, 15 till 60 cm långa och två till sex cm breda. Under våren kommer en upptill 60 cm lång blomstängel som bär tre till sex samtidigt öppna blommor så länge som tre månader. Blommorna är mycket stora med en ljust gulgrön grundton och rosa eller brunröda nyanser. De hängande, vridna petalerna är de mest slående på plantan. De är ljusgröna med rosa kanter, smalt bandliknande och mycket långa. När blommorna första öppnas är de åtta cm och växer med cirka fyra cm per dag under ungefär en vecka och bli närmare 70 cm långa och knappt en cm breda. En gammal övertygelse säger att petalerna fortsätter växa tills de kommer i kontakt med marken, möjligen för att underlätta för myror eller andra krypande insekter att pollinera blomman. Sepalerna är grönvita med mörkgröna nerver och läppen vit med rosa toner och gröna nerver.

!Skötsel
Den är relativt lätt att odla och att få i blom om man kan tillgodose dess behov. //Phrag. caudatum// behöver ha ständigt fuktig kompost, de får inte torka ut, god luftcirkulation och hög luftfuktighet. Ge den en ljus växtplats utan direkt sol, 24000 till 30000 lux, och en intermediär eller varm temperatur, låt den inte gå över 28 grader sommartid och inte under tolv vintertid. Odla i små krukor med en fukthållande mix av fin eller medelgrov barkkompost och perlite, eller i ren sphagnum. Vissa odlare har haft framgång med ett lager av tre till fem cm sphagnum i botten av krukan och resten fin bark. Rötterna söker sig till den fuktiga mossan utan att komposten blir genomblöt. Vattna med vatten av bra kvalité två, tre gånger i veckan under sommaren och en gång i veckan under vintern, ge svag gödning varannan vattning eller mer sällan, de är känsliga för uppbyggnad av salter i komposten. 

!Synonymer
__Homotypic Synonyms:__
//Cypripedium caudatum// Lindley (1840)
//Selenipedium caudatum// Rchb.f. & Warsz. (1854)
//Paphiopedilum caudatum// Pfitzer (1888)
__Heterotypic Synonyms:__
//Selenipedium caudatum// var. //giganteum// Carrière (1884)
//Selenipedium caudatum// var. //roseum// L.Linden (1886)
//Selenipedium caudatum// var. //albertianum// Linden (1888)
//Selenipedium caudatum// var. //uropedium// Rolfe (1891)
//Phragmipedium caudatum// f. //albertianum// O.Gruss & M.Wolff (2007)
 

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragcaudatum.htm]] 2015-10-01
[[Australian Orchid Council|http://www.orchidsaustralia.com/article_%20Phrag_caudatum.htm]] 2015-10-01
[[Orchids Wiki|http://orchids.wikia.com/wiki/Phragmipedium_caudatum]] 2015-10-01
[[Slipperorchids.info|http://slipperorchids.info/phragdatasheets/caudatum/index.html]] 2015-10-01
[[Dr. Giuseppe MAZZA|http://www.photomazza.com/?Phragmipedium-caudatum&lang=en]] 2015-10-01
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=51]] 2015-10-01



















!Allmänt och utbredning
Det är en av de många nya arter som hittats i norra Vietnam nära gränsen till den kinesiska provinsen Yunnan där den växer litofytiskt på kalkstensklippor i öppna, torra skogar mellan 550 och 650 meters höjd.
Den liknar mycket, och är nära besläktad med, //[[Paph. malipoense|8937bc2b-35e1-432c-9c05-658b6aa03b72]]// vars utbredningsområde överlappar men som den aldrig växer aldrig tillsammans med. Blommorna hos //Paph. jackii// har smalare petaler, en mindre gulgrön läpp och en vit staminod med en central gulgrön knöl och fina purpurfärgade nerver.
Arten är uppkallad efter den numera bortgångne Dr Jack Fowlie, en välkänd orkidéentusiasten. Taxonomiskt tillhör den undersläkte Parvisepalum.

!Utseende
Den bildar fyra till sex långsmala, ljusgröna blad med nerver och en svag marmorering i mörkgrönt. Undersidan är översållad med purpurfärgade prickar och den har en köl längs bladets hela längd. Under vintern eller våren kommer en upptill halvmeter lång blomstängel som bär en eller mer sällan två stycken tio cm stora blommor. Läppen är ljusgrön till matt vit med sparsamma prickar i rosa eller purpur. Petalerna är strimmiga i vinrött. Den har en svag doft som är helt olik den hos //[[Paph. malipoense|8937bc2b-35e1-432c-9c05-658b6aa03b72]]//.

!Skötsel
Området där denna växt hittas utsätts för tjock dimma under vintern och kraftiga regn från början av våren och hela sommaren. Ge den intermediära temperaturer med upptill 27 grader under sommaren. Minska vattningen och temperaturen under vintern för att inducera blomningen. November till mars är de torraste månaderna med temperaturer ner till tolv grader. Ge en ljust skuggig placering med god luftcirkulation. Vattna regelbundet var fjärde till var femte dag under tillväxtperioden. Den är lätt att odla och verkar föredra en öppen, väldränerad kompostmix med grus, bark och perlit. Plantan skickar ut långa rhizom och bildar skott långt från moderplantan.

!Synonymer
__Homotypic Synonyms:__
//Paphiopedilum malipoense// var. //jackii// Aver. (1997)
__Heterotypic Synonyms:__
//Paphiopedilum hiepii// Aver. (1998)
//Paphiopedilum malipoense// var. //hiepii// P.J.Cribb (1998)
//Paphiopedilum jackii// var. //hiepii// Koop. (2000)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/paphiopedilummalipoense.htm]] 2015-05-26
[[Slipperorchids.info|http://slipperorchids.info/paphdatasheets/parvisepalum/malipoensevarjackii/index.html]] 2015-05-26



























































































!Allmänt och utbredning
Arten är endemisk för bergskedjan östra Cordillera i provinsen Norte de Santander, norra Colombia, där den växer i svala, fuktiga molnskogar runt 2600 meters höjd.
Den är nära släkt med //[[Rstp. guttulata|a0a88bee-b4ba-4291-b3f3-6d19da2a43c7]]// och //[[Rstp. antennifera|eb4ecc96-82ff-4490-9a92-6c27f906b0c9]]// men utmärker sig genom sin färg och sin smala läpp.
Namnet kommer från latinets ''citrinus'' som närmast kan översättas med "citrongul" efter blomläppens klara färg.

!Utseende
Det är en liten epifyt som sällan blir över 14 cm stor. Den har tunna, hårlika rötter som saknar pseudobulber och vars upprätta bladstjälk är omsluten av fyra till sju tunna, vita täckblad. Bladen blir vanligen upptill åtta cm långa och tre cm breda. Under våren och hösten kommer en drygt fem cm lång blomstängel från bladfästet på ovansidan av det ensamma, ovala bladet. Blomstängeln bär en enda centimeterbred, klargul blomma. Den långa purpurfärgade dorsala sepalen är upprätt och slutar i en tjockare klubbformad spets. De laterala petalerna är likaledes färgade i purpur och klubblika. De tre cm långa, kluvna, sammanväxta laterala sepalerna är klargul, översållad med röda eller purpurfärgade prickar. Den betydligt mindre läppen har markeringar i samma färger.

!Skötsel
Håll plantan skuggigt och i svala eller intermediära temperaturer. Plantera den i en mix av fin barkkompost med perlit eller sphagnum. Vattna regelbundet och håll komposten jämnt fuktig. Den bildar lätt keikis men kan vara nyckfull att få i blom.

!Synonymer
N/A

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/rescitrina.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Restrepia_citrina]]







































































































!Allmänt och utbredning
Den växer terrestriskt eller epifytiskt i Venezuela, Colombia och Ecuador på utsatta klippor eller trädgrenar mellan 1800 och 3000 meters höjd i de sval molnskogarna.
Namnet kommer från det latinska ''amandus'' som betyder "förtrollande". Taxonomiskt tillhör den undersläkte Amanda sektion Amandae.

!Utseende
Det är en miniatyrart som saknar pseudobulber utan ett kort bladskaften kommer direkt från ett underjordiskt rhizom. Bladen är helt upprätta, avlångt ovala och blir mellan åtta och tolv cm långa. Under vintern och våren kommer en bladstängel som reser sig över bladen, upptill 16 cm lång, med tre till fyra stycken samtidigt öppna blommor. De klockformade blommorna blir knappt två cm stora. Den kan särskiljas från andra inom släktet genom sin klasliknande blomställning.

!Skötsel
Håll plantan i en jämn, sval halvskugga håla året, den har ingen distinkt viloperiod. Ge den god luftcirkulation och duscha den ofta, sommartid endast på morgonen innan solen blir för stark. Försök hålla nattemperaturen mellan sex och tolv grader och helst inte över 24 grader dagtid. Vattna regelbundet och hålla komposten fuktig, låt den inte torka ut.
Odla i små krukor med en mix av fin barkkompost och stor andel perlit eller hackad sphagnum. Den verkar också trivas bra i ren, levande sphagnum.

!Synonymer
__Homotypic Synonyms:__
//Spilotantha Amanda// Luer (2006)
__Heterotypic Synonyms:__
//Masdevallia gustavii// Rchb.f. (1875)
//Masdevallia calopterocarpa// Rchb.f. (1886)
//Masdevallia oligantha// Schltr. (1920)
//Masdevallia remotiflora// Kraenzl. (1921)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/masamanda.htm]] 2015-11-15
[[Orchids Wiki|http://orchids.wikia.com/wiki/Masdevallia_amanda]] 2015-11-15





!Allmänt och utbredning
Arten förekommer i fuktiga skogar från Mexico till Nicaragua och på Jamaika och Kuba. Den växer mellan 600 till 3200 meters höjd som en sval- till varmväxande miniatyrepifyt eller ibland, litofyt.
Arten tillhörde tidigare släktet //[[Encyclia|bd328114-eef7-4bb0-988a-95e172e6ffb0]]//. Blommorna är lik encycliorna och den har bulber, men de klänger omkring en hel del och kan bilda mattor som täcker hela sidan på en trädstam.
Artnamnet kommer från grekiskans ''poly'', "många", och ''bulbon'', "bulb", för sina otaliga små pseudobulber.

!Utseende
De ovala pseudobulberna är stora som en böna, kommer väl avgränsade, åtminstone två cm isär, på ett smalt rhizom. De ett till tre elliptiskt avsmalnade, skinande gröna bladen kommer från toppen av pseudobulben. Den är snabbväxande och kan raskt bilda stora bestånd.
Blomman kommer under våren ensam på en kort stängel mellan bladen från toppen av en mogen bulb. Blomman är stor, upptill två och en halv cm i diameter, med en behaglig doft. Sepaler och petaler är avlånga, smala, färgade i gulbrunt med mörkare markeringar mot basen, och med en hjärtformad, vit läpp purpurfärgad vid basen.

!Skötsel
Den vill ha en sval till varm omgivning med lätt skugga. Dagstemperaturen under sommaren runt 24 grader, ner till 15 grader under natten, och ett par grader svalare under vintern. De kan med fördel odlas monterad på bark eller kork för att sörja för dess krypande natur. Om den planteras i kruka används en öppen, medelgrov barkkompost som snabbt torka upp efter vattningen.
Den vill ha en jämn vattning och svag gödning ofta för att inte bränna de tunna rötterna. En fjärdedel till halva den rekommenderade dosen varje vecka under tillväxten.
De bör samtidigt hållas fuktiga, med en minskning av vattenfrekvenser under hösten och vintern.
Det är en variabel art som lätt anpassar sig och därför är relativt enkel att odla.

!Synonymer
__Homotypic Synonyms:__
//Epidendrum polybulbon// Sw. (1788)
//Encyclia polybulbon// Dressler (1961)
__Heterotypic Synonyms:__
//Bulbophyllum occidentale// Spreng. (1826)
//Epidendrum polybulbon// var. //luteoalbum// Miethe (1914)
//Epidendrum cubincola// Borhidi (1976 publ. 1977)
//Dinema cubincola// H.Dietr. (1980)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/encpolybulbon.htm]]
[[Orchids Online|http://www.orchidsonline.com.au/species1454.html]]
[[Encyclia Enthusiasts|http://www.encyclias.org/Enc.polybulbon.htm]]
[[the Orchid House|http://retirees.uwaterloo.ca/~jerry/orchids/culture/enc.polybulbon.html]]





























!Allmänt och utbredning
Som artnamnet antyder är denna mini-minatyrart hemmahörande i Taiwan, endemiska för halvön Hengchun, sydvästra delen av Taiwan, på trädstammar i skogar under 1000 meter över havsnivå.

!Utseende
Arten har ett krypande växtsätt och hela plantan blir vanligen mindre än fem cm stor med ovala pseudobulber som bara blir sex sju mm stora, inte är större än ärtor. Bulberna kommer vanligen med fem till 15 mm mellanrum på det krypande, vedartade, millimetertjocka rhizomet. Det köttiga bladet kommer ensamt i toppen av bulben, upptill fem cm långt och en och en halv cm som bredast och avsmalnande mot basen. Bladets ovansida är klart grönt medan undersidan är blekare. Från basen av bulben kommer under april till maj en upptill tio cm lång blomstängel krönt av en tät blomställning med tre till åtta blommor som är mindre än en cm bred och upptill fem cm långa. Sepaler och petaler är gula eller orange-rödfärgade och småhåriga. Ingen doft.

!Skötsel
Odla plantan skuggigt i varma temperaturer. Håll den fuktigt under sommaren och tillåter inte komposten att torka ut, vintertid från september till maj kan vattningen minskas och komposten hållas lite torrare. Ge en god luftcirkulation för att undvika svamptillväxt.
Försök ge en temperatur på 15 till 18 grader under natten och inte över 28 grader under dagen.
Med sitt krypande växtsätt är grunda skålar eller korgar med vitmossa och fin barkkompost lämpliga odlingskärl, eller odla den monterad.

!Synonymer
__Homotypic Synonyms:__
//Cirrhopetalum taiwanense// Fukuy. (1935)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/bulbtaiwanensis.htm]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Bulbophyllum_taiwanense]]
eFloras [[Flora of China|http://www.efloras.org/florataxon.aspx?flora_id=2&taxon_id=242309297]] & [[Flora of Taiwan|http://www.efloras.org/florataxon.aspx?flora_id=100&taxon_id=242309297]]







































!Allmänt och utbredning
Arten är funnen i Venezuela, Colombia, Ecuador och Bolivia i väldigt fuktiga molnbergsskogar mellan 350 till 2600 meter över havet.

!Utseende
Den är en liten till medelstor epifyt med ett hängande växtsätt. Den långa dinglande stammen bär många små trekantiga ormbunkslika blad. Under hösten och vintern kommer anspråkslösa guldgula oncidiumlika blommor successivt fram från toppen av stammen.

!Skötsel
De föredrar ljusa, svala till varma växtförhållanden med en jämn tillförsel av vatten och gödning under tillväxten. De har behov av en vintervila under hösten med mindre fukt och näring, fram till dess den nya tillväxten börjar under våren. De odlas bäst monterade eller i små mossfyllda korgar. De förökas förhållandevis lätt genom delning, en ny bulb bildar nya rötter om den hålls varmt och fuktigt utan att bli helt blöt.

!Synonymer
__Homotypic Synonyms:__
//Fernandezia parthenocomos// Rchb.f. (1852)
__Heterotypic Synonyms:__
//Lockhartia parthenocomos// var. //crispula// Regel (1856)

!Rekommenderad läsning
[[Internet Orchid Photo Encyclopedia|http://www.orchidspecies.com/lockhalongifolia.htm]]


















!Allmänt och utbredning
Arten växer epifytiskt, terrestriskt eller litofytiskt längs vägar och andra människostörda marker i nordvästra Venezuela, Colombia, Ecuador och Perus molnskogar mellan 1200 till 2850 meters höjd. Den växer i grus och mellan stenblock, i ständigt fuktig mossa och lövkompost under träd, likaväl som på döda, mossbevuxna stubbar. Den växer alltid tillsammans med mossor och ormbunkar på platser med en garanterat konstant fukt.
Den är uppkallad efter den framstående belgiske orkidésamlaren Jean Jules Linden (1817-1898), som publicerade 17 delar av ''Lindenia'' och ''L'Illustration Horticole'' volymerna 17 till 43 och som upptäckte arten nära gränsen mellan Colombia och Venezuela i närheten av sjön Maracaibo 1843. Blommorna liknar de hos //[[Phrag. caudatum|f8ba86f2-f427-4519-b797-9b85b6915e40]]// som den tidigare ansågs vara en variant av, men den saknar i stort sett helt läppen som är så karaktäristiskt för släktet och staminoiden är helt annorlunda. Taxonomiskt tillhör den sektionen Phragmidedium. Kromosomtalet är 2n=28.

!Utseende
Det är en medelstor art med blad som blir 25 till 40 cm långa och två till fem cm breda. Under senhösten och tidig vinter kommer en knappt halvmeter lång blomstängel med två till fyra blommor. Blommorna är unika i det att läppen saknar det typiska påsliknande utseendet utan ser istället ut som en lång, tredje petal. Den har även en tredje pollenklubba som nuddar märkets yta redan innan blommorna har öppnat för att garanterar självbefruktning. Hela blomman går i ljust gulgröna färger. Sepaler och de mer än 40 cm långa petaler är ljusgula med gulgröna, längsgående ränder.

!Skötsel
I naturen växer de svalt eller intermediärt med starkt indirekt solljus, 10000 till 30000 lux. Plantorna bör vattnas med rent vatten och komposten måste hållas fuktig hela tiden. Vissa rekommenderar att odla den på ett fat med ett par cm stående vatten, vilket fungerar bra så länge som komposten spolas igenom ordentligt ovanifrån så snart vattnet på fatet torkat upp.
Plantera om ofta, minst en gång om året, så inte komposten bryts ner för mycket eller att ansamlingen av salter blir för hög. Ge endast svag gödning, de kräver inte mycket. Plantera i en väldränerad mix som tillåter god luftcirkulation, vanligen fungerar en blandning av sphagnum, kol och perlit eller medelgrov barkkompost med perlit. Eftersom den är självpollinerande bildar i stort sett alla blommorna frökapslar, något som stjäl mycket kraft från tillväxten om de tillåts mogna.
Temperaturerna sommartid är mellan 13 och 27 grader, medan den under vintern kan sjunka så låg som ner till tio grader.

!Synonymer
__Homotypic Synonyms:__
//Uropedium lindenii// Lindley (1846)
//Cypripedium lindenii// Van Houtte (1870)
//Selenipedium lindenii// G.Nicholson (1886)
//Cypripedium caudatum// var. //lindenii// A.H.Kent (1889)
//Paphiopedilum caudatum// var. //lindenii// Brongn. (1892)
//Selenipedium caudatum// var. //lindenii// Chapm. (1901)
//Phragmipedium caudatum// var. //lindenii//Pfitzer (1903)
//Paphiopedilum lindenii// V.A.Albert & Börge Pett. (1994)
__Heterotypic Synonyms:__
//Cypripedium caudatum// var. //uropedium// Kraenzl. (1897)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/phragmlindenii.htm]] 2015-10-23
[[Orchids Wiki|http://orchids.wikia.com/wiki/Phragmipedium_lindenii]] 2015-10-23
[[Slipperorchids.info|http://slipperorchids.info/phragdatasheets/lindenii/index.html]] 2015-10-23
[[PhragWeb|http://phragweb.slipperaceae.info/phragmipedium/species/display_species_phrag.asp?phrag_id=175]] 2015-10-23
[[eMonocot|http://e-monocot.org/taxon/urn:kew.org:wcs:taxon:152874]] 2015-10-23














































































































!Allmänt och utbredning
Arten //Ddc. glumaceum// [den-droh-KY-lum gloo-ma-see-um] är bara känd från provinsen Kalimantan Timur på östra Borneo och de filippinska öarna Luzon, Mindanao och Leyte där de växer som epifyt i regnskogar, fuktiga mosskogar och utsatta bergsidor mellan 500 och 2330 meter över havsnivån. Jim Cootes skrev 2001 att den är väldigt vanlig inom delar av sitt utbredningsområde.
<$reveal type="nomatch" state="$:/temp/state-fcce71a1-079c-4de6-b6b0-a05ecace7b17" text="show">
<$button set="$:/temp/state-fcce71a1-079c-4de6-b6b0-a05ecace7b17" setTo="show">visa mer info om undersläkten</$button></$reveal>
<$reveal type="match" state="$:/temp/state-fcce71a1-079c-4de6-b6b0-a05ecace7b17" text="show">
På den filippinska ön ''Luzon'' har denna växt registrerats i Bataan provinsen, Mariveles Mount längs Lamao floden. I Ilcos Norte-provinsen har den hittades längs vägen från ett gruvarbetareläger till Mt. Burnay i Mt. Sicapoa-området. I Benguet-provinsen har den samlats in på bergen Simakoko, Bosoboso, Mt Data, Mt Pulog och Mt Sinapsapan. I Cagayan-provinsen har den samlats in på berget Mt Cagua och i Camarines Sur på bergen Iriga och Mt Isarog. I Ifugao-provinsen har denna art hittats på bergen Himi-o och Mt Polis. I Laguna-provinsen har den hittats på berget Maquiling. I Pampanga-provinsen har den samlats på berget Arayat och i Quezon-provinsen på berget Cadig och Mt Malaiaga. I Rizal-provinsen har denna art samlats vid Angilog, Antipolo, Mt Irid, Mt Susungdalaga och Mt Tokuanbanoy.
På ''Mindoro'' har arten samlats in på berget Halcon.
Inom Visayas, på ''Biliran Island'', har denna växt hittats på toppen av Mt Suiro. På ''Leyte'' vid Masaganap, Conpagal och Buenavista både nära Jaro och Cabalian i södra Leyte. Det har samlats in plantor av arten från berget Bulilao på ''Capiz Island''.
På ''Mindanao'' har denna art samlats i från Davao-provinsen på Mt McKinley, från provinsen Davao del Sur på berget Apo, Davao del Norte-provinsen från berget Kampalili och Davao Central på berget Mansamuga. I Lanao del Sur i provinsen har den visat sig vid staden Camp Keithley på Sacred Mountain och i Agusan del Norte-provinsen på berget Hilonghilong.
Från ''Borneo'' är den känd från en insamling från Kotawaringan i provinsen Kalimantan Timur.

<$button set="$:/temp/state-fcce71a1-079c-4de6-b6b0-a05ecace7b17" setTo="hide">dölj</$button>
</$reveal>
Artepitelet påstås komma från utseendet på de outslagna blomstänglarna som ska påminna om majskolvar.

!Utseende
Arten är mycket variabel med vissa kloner med dubbelt så stora blad som andra, stora och små blommor med mera. De avlångt ovala pseudobulberna kommer tätt tillsammans på rhizomet. Bulberna är en till fem cm långa och en halv till en och en halv cm tjocka. Bulberna är omgivna av tre till sex tunna täckblad medan de växer till. Allt som finns kvar av täckbladen när bulberna är fullväxta är trådiga fibrer. Bladen fäster vid toppen av bulben med en två till tolv cm lång stjälk. Själva bladen är tunna, avlångt lansettlika, sju till mer än 40 cm långa och två till fem cm breda, med fem till sju tydliga nerver. Blomstängeln och bladen kommer samtidigt och förlängs med det nya bladets tillväxt. Basen av blomstängeln är mer eller mindre upprätt och huvuddelen av stängeln nedhängande som i en båge. Hela blomstängeln kan bli så lång som en halvmeter lång men runt 30 cm är vanligare. Blommor, som inte öppnas helt, kommer alternerande i två rader, varannan eller var tredje mm på hela vägen mot toppen. Om blommorna har stödblad är dessa vanligen gröna men kan vara aprikosfärgade eller rosa.
Sepaler och petaler är brett utspredda och vita till krämfärgade med en läpp som är gul eller orange eller undantagsvis vit eller brun. Om arten har en vit läpp kan den misstas för //[[Ddc. niveum|3d791eb9-3c5b-442e-a1d8-53951bb32658]]//.
Blommorna har en stark, söt och vedartade eller höliknade, inte alls oangenäm, doft.

!Skötsel
//Ddc. glumaceum// är en av de populäraste inom släktet, redan 1908 hävdade Ames att det var den vanligaste arten av //Dendrochilum// i odling.
De är långsamväxande men de kan med fördel odlas i krukor på fönsterbrädan då de föredrar en intermediär temperatur, hellre lite svalare än för varmt, och halvskuggigt till ljust utan direkt solsken. Speciellt under sommarmånaderna behöver de lätt skugga eftersom bladen lätt bränns. Resten av året så ljust som möjligt. De kan gärna få tillbringa sommaren ute på en halvskuggig växtplats. 
Låt plantan torka upp mellan vattningarna under vintermånaderna, vatten en gång i veckan kan vara lagom. Resten av året lite fuktigare men låt fortfarande plantan torka lite mellan vattningen.
Odla i fin orkidékompost med tillsats av perlite eller sphagnum mossa. Plantera inte om förrän plantan är på väg ut ur krukan, de tycker inte om att bli störda och tjurar gärna efter en omplantering.

!Synonymer
__Homotypic Synonyms:__
//Platyclinis glumacea// Benth. (1881)
//Acoridium glumaceum// Rolfe (1904)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/dendroglumaceum.htm]]
[[Dendrochilum|http://www.dendrochilum.com/page103.htm]]
[[Wikipedia|http://en.wikipedia.org/wiki/Dendrochilum_glumaceum]]
[[Orchids Wiki|http://orchids.wikia.com/wiki/Dendrochilum_glumaceum]]








































































































































































































































!Allmänt och utbredning
Arten påträffas i Bolivia som en liten svalväxande epifyt runt 1800 meters höjd över havet.
Den namngavs för att hedra den bolivianska upptäckaren Menato.

!Utseende
//Masd. menatoi// saknar bulber, utan bladen kommer direkt från den underjordiska stammen. De rundade baden smalnar av mot basen och blir knappt en dm höga. Blommorna kommer på en stängel som är lika lång eller något högre än bladen.

!Skötsel
De bör stå skuggigt eller ljust utan direkt sol. Ge den svala eller tempererade förhållanden och håll den ständigt fuktig utan att den är blöt. Eftersom den saknar bulber kan den inte hålla några vattenreserver. Ge den svag gödning ofta hellre än kraftig gödning sällan, det kan bränna rötterna.

!Synonymer
__Homotypic Synonyms:__
//Alaticaulia menatoi// Luer (2006)
__Heterotypic Synonyms:__
//Masdevallia foeda// Luer & R.Vásquez (1988 publ. 1989)

!Rekommenderad läsning
[[Internet Orchid Species Photo Encyclopedia|http://www.orchidspecies.com/masmenatoi.htm]]
[[Dansk Orkideforum|http://forum.orkideer.dk/viewtopic.php?t=802&view=previous&sid=8c0adba0daec08128da2c3971ee7873b]] bilder





































































































Det här är tänkt att bli en samling beskrivningar av världens mest odlade växter, orkidéerna. Min föresats är att den ska innehålla beskrivningar om växtplats, utseende och skötsel plus möjligheten att samla favoriter i listor.

Taxonomiskt följer jag [[World Checklist of Selected Plant Families|http://apps.kew.org/wcsp/qsearch.do]]. Alla arter i den här wikin är de som anses accepterade i deras databas.
Jag kan inte ta ansvar för de skötselråd som ges här då jag inte har odlat alla arter själv, utan de är en produkt av råd och anvisningar från böcker och internetforum.

God odling

<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" x="0" y="0" width="256" height="256" version="1.1" xml:space="preserve"><style>.s0{fill:none;stroke-linecap:round;stroke-width:20;stroke:#000;}</style><g transform="scale(3.1013)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><circle r="55.5" cy="128" cx="128" style="fill:none;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:20;stroke:#000"/><path d="m10.1 128 31.7 0" class="s0"/><path d="m214.1 128 31.7 0" class="s0"/><path d="M128.3 9.9 128 41.9" class="s0"/><path d="m128.3 213.9-0.3 31.9" class="s0"/><path d="M68.9 187.1 40.1 215.9" class="s0"/><path d="M218.9 37.1 190.1 65.9" class="s0"/><path d="M40.1 37.1 68.9 65.9" class="s0"/><path d="m190.1 187.1 28.8 28.8" class="s0"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 512 512" width="512" height="512" xmlns:svg="http://www.w3.org/2000/svg" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="m203 351.1l0-317c14.7-38.3 91.2-40 102-2l0 318C387.8 426 320.4 510.7 254 510 188 509.3 123 423.7 203 351.1Z" style="fill:none;stroke-width:4;stroke:#000"/><path d="m283 293l2 73c74.3 46.5 20.8 127.5-26 123 -66.7 0-91.3-70.4-50-112 1-1 19-13.7 19-9l-2-79c20.3-11.3 37.3 26.4 57 4Z" style="fill:#000;stroke:#000"/><circle cx="283" cy="418" r="16.5" style="fill:#fff;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:4;stroke:#fff"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256" version="1.1"><style>.s0{fill:none;stroke-width:7;stroke:#000;}</style><style>.s0{baseline-shift:baseline;block-progression:tb;direction:ltr;text-align:start;text-indent:0;text-transform:none;}</style><path d="M93.3 216.8 21.3 156.5C10.2 145.3 22.2 133.5 22.2 133.5-33.2 72.6 49.1-1.4 108.9 52.1c9.9-8.8 18.4-4.8 25.1 0.9l57.8 51.5c6.8 6.1 7.5 12.2 1.5 19.7-10.9 13.7-19.1 22.7-35.3 42.5l52.1-9.2c6.9-23.1 30.7-37.1 32.2-26.4l9.7 66.4c2 13.5-34 1.2-39.2-16l-77.7 14.7c0 0-11.6 14.7-18.1 21.4-6.8 7-14.8 7.1-23.7-0.7zM34.8 118 92.1 65.6C57.2 25.1-5.3 81.9 34.8 118ZM91.8 196.5c9.5 5.7 14.7 5.9 21.5-2.3l57.6-70.5c6-9 3.1-12-4-18.2L125.8 69.4c-7-6.1-11.8-3-18.7 3.7L41.8 135.8c-5.3 5.8-5.5 11.8 2.7 19z" class="s0"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="64" viewBox="0 0 64 64" width="64" version="1.1" y="0" x="0"><g transform="matrix(.32862 0 0 .32787 -.073420 0)"><path d="m90.2 42.7c-42 0-76.2 34.2-76.2 76.2 0 42 34.2 76.2 76.2 76.2 42 0 76.2-34.2 76.2-76.2 0-42-34.2-76.2-76.2-76.2zm-66.7 76.2c0-36.8 29.9-66.7 66.7-66.7s66.7 29.9 66.7 66.7h-133.4zM27.5 21.9 27.5 21.9h32.6v3.4h-32.6v-3.4zm1.1-21.9 31.5 8.4-0.9 3.3-31.4-8.4 0.9-3.3zm31.5 38.9-31.4 8.4-0.9-3.3l31.5-8.4 0.9 3.3zM147.2 5.8c-17.3 0-31.4 6.8-33.6 15.5h-9.1v-11.9h-28.6v8.1h-6.3v12.5h6.3v8.1h28.6v-11.9h9.1c2.2 8.7 16.4 15.5 33.6 15.5 18.8 0 34.1-8 34.1-17.9 0-9.9-15.3-17.9-34.1-17.9z"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" version="1.1"><g transform="translate(1.4418435,-964.93186)"/><g transform="translate(1.4418435,-964.93186)"><path d="m15.8 990.3-3.2 1.4c-5.6-2.7-9.1-6.3-11-9.9-6-11 2.3-22.4 11-11.1 6.9-9.7 15.7-2.4 12.3 7.9" style="fill:none;stroke-width:3;stroke:#ccc"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 512 512" width="512" height="512" xmlns:svg="http://www.w3.org/2000/svg" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="m203 351.1l0-317c14.7-38.3 91.2-40 102-2l0 318c82.8 75.9 15.4 160.6-51 159.9 -66-0.7-131-86.3-51-158.9Z" style="fill:none;stroke-width:4;stroke:#000"/><path d="m283 173l2 193c74.3 46.5 20.8 127.5-26 123 -66.7 0-91.3-70.4-50-112 1-1 19-13.7 19-9l-2-199c20.3-11.3 37.3 26.4 57 4Z" style="fill:#000;stroke:#000"/><circle cx="283" cy="418" r="16.5" style="fill:#fff;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:4;stroke:#fff"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 320 320" width="256" height="256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><style>.s0{opacity:0.2;}.s1{fill:none;stroke-width:40;stroke:#000;}</style><g transform="translate(0 -732.362)"><g opacity="0.2"><path d="m60.5 892.4l0 140M20 1032.4c25.4 0 66.3 0 80 0M20 892.4c25.4 0 66.3 0 80 0" class="s1"/></g><g opacity="0.2"><path d="m162.5 822.4l0 210M120 1032.4c25.4 0 66.3 0 80 0M120 822.4c25.4 0 66.3 0 80 0" class="s1"/></g><g><path d="m262.5 752.4l0 280M220 1032.4c25.4 0 66.3 0 80 0M220 752.4c25.4 0 66.3 0 80 0" class="s1"/></g></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 320 320" width="256" height="256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><style>.s0{opacity:0.2;}.s1{fill:none;stroke-width:40;stroke:#000;}</style><g transform="translate(0 -732.362)"><g opacity="0.2"><path d="m60.5 892.4l0 140M20 1032.4c25.4 0 66.3 0 80 0M20 892.4c25.4 0 66.3 0 80 0" class="s1"/></g><g><path d="m162.5 822.4l0 210M120 1032.4c25.4 0 66.3 0 80 0M120 822.4c25.4 0 66.3 0 80 0" class="s1"/></g><g opacity="0.2"><path d="m262.5 752.4l0 280M220 1032.4c25.4 0 66.3 0 80 0M220 752.4c25.4 0 66.3 0 80 0" class="s1"/></g></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 320 320" width="256" height="256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><style>.s0{fill:none;stroke-width:40;stroke:#000;}.s1{opacity:0.2;}</style><g transform="translate(0 -732.362)"><g><path d="m60.5 892.4l0 140M20 1032.4c25.4 0 66.3 0 80 0M20 892.4c25.4 0 66.3 0 80 0" class="s0"/></g><g opacity="0.2"><path d="m162.5 822.4l0 210M120 1032.4c25.4 0 66.3 0 80 0M120 822.4c25.4 0 66.3 0 80 0" class="s0"/></g><g opacity="0.2"><path d="m262.5 752.4l0 280M220 1032.4c25.4 0 66.3 0 80 0M220 752.4c25.4 0 66.3 0 80 0" class="s0"/></g></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256" version="1.1"><style>.s0{fill:none;stroke-width:7;stroke:#000;}</style><style>.s0{baseline-shift:baseline;block-progression:tb;direction:ltr;text-align:start;text-indent:0;text-transform:none;}</style><path d="M93.3 216.8 21.3 156.5C10.2 145.3 22.2 133.5 22.2 133.5-33.2 72.6 49.1-1.4 108.9 52.1c9.9-8.8 18.4-4.8 25.1 0.9l57.8 51.5c6.8 6.1 7.5 12.2 1.5 19.7-10.9 13.7-19.1 22.7-35.3 42.5l52.1-9.2c6.9-23.1 30.7-37.1 32.2-26.4l9.7 66.4c2 13.5-34 1.2-39.2-16l-77.7 14.7c0 0-11.6 14.7-18.1 21.4-6.8 7-14.8 7.1-23.7-0.7zM34.8 118 92.1 65.6C57.2 25.1-5.3 81.9 34.8 118ZM91.8 196.5c9.5 5.7 14.7 5.9 21.5-2.3l57.6-70.5c6-9 3.1-12-4-18.2L125.8 69.4c-7-6.1-11.8-3-18.7 3.7L41.8 135.8c-5.3 5.8-5.5 11.8 2.7 19z" class="s0"/><path d="m78.5 99.4c-4 2.3-6.8 6.1-10.3 9.1-8.7 8.6-18 16.7-26.2 25.8-2.6 3.2-3.8 7.8-1.5 11.4 3 6.1 9 9.7 13.7 14.4 13.7 12 27.2 24.2 41.3 35.7 4.2 2.5 9.7 4.8 14.4 2.1 5.5-2.5 8.4-8.1 12.4-12.4 7.1-8.8 14.6-17.3 21.2-26.4 2.1-2.8 1-6.8-1.9-8.6-19.4-16.9-38.8-33.8-58.4-50.4-1.4-1-3.1-1.2-4.7-0.8z" fill="#0d0404"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" version="1.1"><style>.s0{fill:none;stroke-width:1;stroke:#a6a6a6;}</style><g transform="matrix(1.0279148,0,0,1.0279395,-5.7131799,-26.41996)" style="stroke-width:1;stroke:#a6a6a6"><path d="m120 169.9c-1.7-0.8-8.8-2.3-10.8-1.3-12.5 8.8-14.1 23.1-14.9 29.4-0.6 5.7-9.1 22.3-17.5 24.8-11.5 3.2-32.4-0.8-41-8.8-7.5-7.2-16.4-15.4-18.9-23.9-1.3-4.3-0.4-7.1-2.5-11.2-1.8-4.6-8.1-15.8-8.3-21.9-0.3-8.8 1.7-16.1 5.9-21.3 4.4-1.9 10.2-17.7 19.5-25.4 8-9.4 26.1-19.6 34.1-22.7 2.1-0.2 20.2-2.2 21.4-1.7 8 1 15.5 3 22.1 7 4 2.7 10.1 10 5.4 18.7-2.9 6.8-4.2 15.2-4.4 21.3 4.9 13 7.8 13.4 15.5 22.2M140.2 169.2c1.7-0.8 8.8-2.3 10.8-1.3 12.5 8.8 14.1 23.1 14.9 29.4 0.6 5.7 9.1 22.3 17.5 24.8 11.5 3.2 32.4-0.8 41-8.8 7.5-7.2 16.4-15.4 18.9-23.9 1.3-4.3 0.4-7.1 2.5-11.2 1.8-4.6 8.1-15.8 8.3-21.9 0.3-8.8-1.7-16.1-5.9-21.3-4.4-1.9-10.2-17.7-19.5-25.4-8-9.4-26.1-19.6-34.1-22.7-2.1-0.2-20.2-2.2-21.4-1.7-8 1-15.5 3-22.1 7-4 2.7-10.1 10-5.4 18.7 2.9 6.8 4.2 15.2 4.4 21.3-4.9 13-7.8 13.4-15.5 22.2M88.8 86.2c2-14.6 25-39.6 41.6-40 16.4-0.2 40.1 26.8 41 39.4M45.6 220.2c-2.1 18.4 2 31.3 8.4 32.4C65.6 254.6 94.7 243.2 106.2 230.6M214.8 220.1c2.1 18.4-2 31.3-8.4 32.4-11.6 2-40.7-9.4-52.2-22M125.2 163c-3.9 5.4-6.5 10.6-4.3 12.8 4 4 15.2 3.8 19.1-0.2C142.3 173.4 139.2 168.1 135 162.6M111 168c0 0 8 7.3 5.8 8.6-7.8 4.7-14.3 18 5.4 22.8M107.8 169.2c0.5 4.2-1 8.2-2.9 12.1-2.5 5-6.9 9.3-7.4 14.2-1.2 13.3 1.6 22.6 7.2 24.2C109.8 221 119.5 208.5 127.7 207.1M149.2 167.5c0 0-7.8 7.5-5.6 8.8 7.8 4.7 14.3 18-5.4 22.8M152.6 168.9c-0.5 4.2 1 8.2 2.9 12.1 2.5 5 6.9 9.3 7.4 14.2 1.2 13.3-1.6 22.6-7.2 24.2-5 1.4-14.8-10.8-23-12.2M100 215.2c-4.2 3.7-4.1 5.7-1.2 9 3 3.1 7 7.2 11.4 10.2 7.4 5.1 14.2 14.6 20.4 15.8 5.3-0.9 13.1-8.9 19.8-16.2 3.6-3.9 8.4-4.1 13.2-12.8 1.5-2.7-3.2-6-3.2-6M125.6 179c-0.4 3.2-0.5 7-0.8 9.6M128 192.4c-4.1-5.5-8.3-5.3-8.3-5.3 1.8 4.8 0.7 7.3 1.7 10.3 2.7 4 3 6.7 5.4 8.8 1.9 1.6 3.6 3.3 5 1.8 3-3 5.7-6.6 7.3-10.4 1.7-4.2 0.5-7.2 1.7-10.6 0 0-4.1 0.1-8.6 5.6M135.2 178.2c-0.5 5.1 0.4 7.4 0.5 11.3M129 194.8l0.4 8.1M131.3 194.8l-0.1 7.9" class="s0"/><ellipse ry="0.2" rx="0.3" cy="192.2" cx="129.9" style="fill:#000;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:1;stroke:#a6a6a6"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" x="0" y="0" width="256" height="256" version="1.1" xml:space="preserve"><style>.s0{fill:none;stroke-linecap:round;stroke-width:20;stroke:#000;}</style><g transform="scale(3.1013)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><circle cx="128" cy="128" r="55.5" style="fill:none;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:20;stroke:#000"/><path d="m10.1 128 31.7 0" class="s0"/><path d="m214.1 128 31.7 0" class="s0"/><path d="M128.3 9.9 128 41.9" class="s0"/><path d="m128.3 213.9-0.3 31.9" class="s0"/><path d="M68.9 187.1 40.1 215.9" class="s0"/><path d="M218.9 37.1 190.1 65.9" class="s0"/><path d="M40.1 37.1 68.9 65.9" class="s0"/><path d="m190.1 187.1 28.8 28.8" class="s0"/><path d="m128.2 75.5c-17.6 1.3-34.7 11.3-42.7 27.3-6.1 11.6-7.1 25.9-3.2 38.4 6.2 19.8 25.6 34.5 46.4 34.9 5-0.1 5.6-5.7 5.1-9.6-0.1-28.8 0.2-57.7-0.2-86.5-0.3-2.8-2.8-4.5-5.5-4.4z" fill="#040101"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" x="0" y="0" width="256" height="256" version="1.1" xml:space="preserve"><style>.s0{fill:none;stroke-linecap:round;stroke-width:20;stroke:#000;}</style><g transform="scale(3.1013)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><g transform="translate(0 173.36)"/><circle r="55.5" cy="128" cx="128" style="fill:#030303;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:20;stroke:#000"/><path d="m10.1 128 31.7 0" class="s0"/><path d="m214.1 128 31.7 0" class="s0"/><path d="M128.3 9.9 128 41.9" class="s0"/><path d="m128.3 213.9-0.3 31.9" class="s0"/><path d="M68.9 187.1 40.1 215.9" class="s0"/><path d="M218.9 37.1 190.1 65.9" class="s0"/><path d="M40.1 37.1 68.9 65.9" class="s0"/><path d="m190.1 187.1 28.8 28.8" class="s0"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" version="1.1"><style>.s0{fill:none;stroke-width:4;stroke:#000;}</style><path d="m125.1 12.5c-5.2 4.7-7.3 11.8-10.8 17.7-4.8 9.8-10.2 19.5-14.5 29.4-1.3 3.9 3 7.1 6.7 6.3 15-0.1 30 0.3 44.9-0.4 4.1-0.8 5.1-5.9 2.8-9-7.1-13.9-13.9-28.1-21.6-41.7-1.5-2.7-4.5-3.8-7.3-2.4z" style="fill:#a0a0a0;opacity:0.5"/><g transform="translate(0,-796.36216)"><path d="M116.4 816.1 12.4 1022.3c-7.1 14.1-6.1 21.9 8.9 22l208.7 1.3c16.8 0.1 21.9-6.3 14.6-20.7L138.4 815.7c-7.6-15.1-14.8-13.7-22 0.4z" style="fill:none;stroke-linecap:round;stroke-width:15;stroke:#000"/><path d="m26.5 988.4 202 0M58.5 924.9l137.5 0M91.5 859.4l72.5 0" class="s0"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" version="1.1"><style>.s0{fill:none;stroke-width:4;stroke:#000;}</style><path d="m66.5 126.6c-3.8 3.7-5.1 9.2-7.8 13.7-7.9 15.9-16.1 31.6-23.7 47.5-1.6 3.9 2.4 7.6 6.3 6.8 58 0.4 116 0.4 174 0 4.4 0.4 7.2-4.9 4.7-8.3-9.7-19.4-19.4-38.8-29.4-58-2.9-4-8.5-1.8-12.6-2.4-36.5 0.1-73-0.2-109.4 0.1-0.7 0.2-1.3 0.4-2 0.5z" style="fill:#a0a0a0;opacity:0.5"/><g transform="translate(0,-796.36216)"><path d="M116.4 816.1 12.4 1022.3c-7.1 14.1-6.1 21.9 8.9 22l208.7 1.3c16.8 0.1 21.9-6.3 14.6-20.7L138.4 815.7c-7.6-15.1-14.8-13.7-22 0.4z" style="fill:none;stroke-linecap:round;stroke-width:15;stroke:#000"/><path d="m26.5 988.4 202 0M58.5 924.9l137.5 0M91.5 859.4l72.5 0" class="s0"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" version="1.1"><style>.s0{fill:none;stroke-width:4;stroke:#000;}</style><path d="m99.5 61.1c-3.8 3.7-5.1 9.2-7.8 13.7-8.2 16.6-16.8 33.2-24.8 49.9-1.7 4 2.7 7.6 6.6 6.7 37-0.1 74.1 0.2 111.1-0.1 4.4-0.3 5.6-5.8 3.1-8.9-10.1-19.8-19.9-39.7-30.3-59.3-3.1-4.3-9-2.1-13.4-2.6-14.1 0.1-28.3-0.2-42.4 0.1-0.7 0.2-1.3 0.4-2 0.5z" style="fill:#a0a0a0;opacity:0.5"/><g transform="translate(0,-796.36216)"><path d="M116.4 816.1 12.4 1022.3c-7.1 14.1-6.1 21.9 8.9 22l208.7 1.3c16.8 0.1 21.9-6.3 14.6-20.7L138.4 815.7c-7.6-15.1-14.8-13.7-22 0.4z" style="fill:none;stroke-linecap:round;stroke-width:15;stroke:#000"/><path d="m26.5 988.4 202 0M58.5 924.9l137.5 0M91.5 859.4l72.5 0" class="s0"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" version="1.1"><style>.s0{fill:none;stroke-width:4;stroke:#000;}</style><path d="m34.5 190.1c-3.8 3.7-5.1 9.2-7.8 13.7-5.2 10.9-11.4 21.5-15.4 32.9-1.5 4.5 2.9 8.9 7.4 8.1 65.5 1 131.1 1.2 196.6 1.4 8.3-0.3 16.8 0.6 25-1.1 4.9-1.3 5.8-7.3 3.5-11.2-6.5-14.3-13.7-28.2-20.9-42.1-2.9-4-8.5-1.8-12.6-2.4-57.7 0-115.5 0-173.2 0-0.8 0.2-1.7 0.4-2.5 0.7z" style="fill:#a0a0a0;opacity:0.5"/><g transform="translate(0,-796.36216)"><path d="M116.4 816.1 12.4 1022.3c-7.1 14.1-6.1 21.9 8.9 22l208.7 1.3c16.8 0.1 21.9-6.3 14.6-20.7L138.4 815.7c-7.6-15.1-14.8-13.7-22 0.4z" style="fill:none;stroke-linecap:round;stroke-width:15;stroke:#000"/><path d="m26.5 988.4 202 0M58.5 924.9l137.5 0M91.5 859.4l72.5 0" class="s0"/></g></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 512 512" width="512" height="512" xmlns:svg="http://www.w3.org/2000/svg" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="m203 351.1l0-317c14.7-38.3 91.2-40 102-2l0 318c82.8 75.9 15.4 160.6-51 159.9 -66-0.7-131-86.3-51-158.9Z" style="fill:none;stroke-width:4;stroke:#000"/><path d="m283 53l2 313c74.3 46.5 20.8 127.5-26 123 -66.7 0-91.3-70.4-50-112 1-1 19-13.7 19-9L226 49c20.3-11.3 37.3 26.4 57 4Z" style="fill:#000;stroke:#000"/><circle cx="283" cy="418" r="16.5" style="fill:#fff;stroke-linecap:round;stroke-linejoin:bevel;stroke-width:4;stroke:#fff"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256" version="1.1"><style>.s0{fill:none;stroke-width:7;stroke:#000;}</style><style>.s0{baseline-shift:baseline;block-progression:tb;direction:ltr;text-align:start;text-indent:0;text-transform:none;}</style><path d="M93.3 216.8 21.3 156.5C10.2 145.3 22.2 133.5 22.2 133.5-33.2 72.6 49.1-1.4 108.9 52.1c9.9-8.8 18.4-4.8 25.1 0.9l57.8 51.5c6.8 6.1 7.5 12.2 1.5 19.7-10.9 13.7-19.1 22.7-35.3 42.5l52.1-9.2c6.9-23.1 30.7-37.1 32.2-26.4l9.7 66.4c2 13.5-34 1.2-39.2-16l-77.7 14.7c0 0-11.6 14.7-18.1 21.4-6.8 7-14.8 7.1-23.7-0.7zM34.8 118 92.1 65.6C57.2 25.1-5.3 81.9 34.8 118ZM91.8 196.5c9.5 5.7 14.7 5.9 21.5-2.3l57.6-70.5c6-9 3.1-12-4-18.2L125.8 69.4c-7-6.1-11.8-3-18.7 3.7L41.8 135.8c-5.3 5.8-5.5 11.8 2.7 19z" class="s0"/><path d="m118.6 64.9c-6.5 0.3-10.7 6.1-15.2 10-20.3 19.5-40.8 38.9-60.9 58.8-3.3 3.2-7 7.7-5.4 12.6 2.4 7.2 9.2 11.2 14.3 16.2 13.8 12.1 27.4 24.3 41.5 36 4.3 2.5 9.9 4.8 14.6 2.1 5.7-2.8 8.8-8.7 12.9-13.2 17.5-21.4 35.1-42.7 52.3-64.3 2.7-3.7 4-9.3 0.5-12.9-4.8-5.4-10.6-9.8-15.9-14.7C146.5 85.9 135.7 76.1 124.4 66.8c-1.7-1.2-3.7-1.9-5.8-1.9z" fill="#070404"/></svg>
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1" width="500" height="256" viewBox="0 0 500 256" overflow="visible" enable-background="new 0 0 783.086 400.649" xml:space="preserve"><style>.s0{fill:none;stroke:#000;}</style><path d="m99.4 129.7c2.1 1.4 1.2 4.7 2.8 6.3 0.9 0.9 2.5-5.1 2.8-5.4 0.4-0.4 1 0.7 1.4 1.1 0.6 0.6 1.2-0.3 1.8 0.3 1.4 1.4 3.5 1.4 6.5 1.4 1 0 2.9-1 2.9 0 0 3.8 6 3.5 8.5 6 1.4 1.4 3.2 2.8 4.6 4.3 1.4 1.4 3.3-0.5 4.3 0.5 1.7 1.7 4.5 3.9 4.5 7-0.2 1.9-1.8 3.3-3 4.5 2.3-0.8 7.1-1.7 5.6 0.7 0 0 4.2-1.8 8 2.7 0.3 0.3 9.7 0.8 12.4 3.5 1.3 0.5 3.1 2.8 4.8 3 0.9 0.1-0.6 5.1-1.2 5.8-2.6 1.3-4.4 3.8-4.7 6-0.6 0.6-1.5 14.1-1.9 14.5-1.6 1.6-1.5 4.8-3.1 6.4-2.5 2.5-8.6 2-11 4.4-1.4 1.4 2 3 0.6 4.4-2.5 2.5-2.2 7.3-4.6 9.8-1.7 1.7-3.3 3.6-5 5.3-1.1 1.1-4.5-2.2-5.1-1.6 0.2 1 0.7 2.2 1 2.9 0.4 0.4 5.1 1.3 3.3 3.1-1.4 1.4-2.9 2.5-4.2 3.9-0.6 0.6-2.3-1.3-2.9-0.7-0.9 0.9 0.1 3.9-0.6 4.6-1.4 1.4-3.3-1.1-3.7-0.6-1.5 1.5 1 4.3 2 5.3 1.1 1.1-2.1 5.2-2.2 5.6-0.4 1.7 2.4 0.3 2.4 0.6 0 3.1 1.6 5.4-0.9 7.9-0.8 0.8 0.8 2.9 0.6 3.1-0.9 0.9-3.4-0.6-3.6-0.7-0.6-0.6-2.1-0.3-3-1.1-0.8-0.8-1.6-1.7-2.4-2.5-1.9-1.9-1.9-5.3-3.7-7.1-1.7-1.7 3.4-3.4 1.8-5-2.5-2.5-3.2-5.9-5.2-8-0.5-0.5-0.1-2-0.6-2.5-1-1 0.3-4.1-0.4-5.5-1.3-2.6 1.5-8.6-0.9-11-1-1 1.3-9.7-0.4-11.4-0.9-7.4 1.7-6.9-1.4-12.6-0.4-0.4-1.8-0.3-2.2-0.7-1.4-1.4-4.3-2.1-5.8-3.5-0.7-0.7-1.2-1.6-1.9-2.2-1.8-1.8-3.3-3.8-5.1-5.6-1-1-0.4-3.4-1.4-4.4-1.6-1.6-3.5-5.7-5.4-7.6-1.7-1.7 3.4-4.1 1.5-6-0.2-0.2-1.5-1.6-0.9-2.2 3-4.3 5.8-9 7.8-13 0.8-0.8-2.5-3.3-1-4.9 1-1 3.8-2.3 4.5-5.1 1.3 0 1.8-0.2 2.4-0.7 1.2-1.2 0.1-1.3 1.2-2.5z" class="s0"/><path d="m115.9 73.1c-1.2 1.2-3.3-0.5-4.2 0.4-2.4 2.4-4.7 4.6-7 6.9-1.4 1.4-2 3.5-3.4 4.9-1.3 1.3-3.5 1.3-4.7 2.5-1.8 1.8-3.9 3.3-5.5 4.9-2.1 2.1 2.5 8-1.5 12-0.4 0.4-1.5-4-2-4.5-0.3-0.3 0-1.5 0-2 0.6-0.8-1-1.8-1.5-2.5-0.4-0.4-5.6-2.9-6.9-1.6-1 1-1.6 2.3-2.5 3.3-3.3-1.5-2.3-2.1-7.4-1.5-1.6 1.6-5 1.6-6.6 3.3-2.4 2.4-3.9 9.1-3.9 13 0 3.5 6.6 8 8.4 6.3 0.8-0.8 2.1-1.2 2.9-2 1-1 1-3.2 2-4.2 0.3-0.3 2.9-0.3 3.1-0.1 2.7 2.7-2.7 10.2-2 10.9 0.1 0.1 7.3-0.6 7.3 0.3 0 0.7-0.1 10.8 0.3 11.1 1 1 4.9 3.5 4.9 4.9 0 0-1.6-1.7-3.6-1.7-5.1 0-3.8-5.9-4.9-7-0.9-0.9-2.1-1.6-3-2.5-1-1-3.9-0.1-5.2-0.7-1.9-0.9-4.3-2.5-5.9-4-0.5-0.5-2.5 0.4-2.6 0.5-0.6 0.6-7.3-1.8-7.4-1.9-2.2-2.2-5.8-3.4-7.9-5.5-0.7-0.7 1.6-3.9 0.8-4.7-0.1-0.1-1 0-1 0 0-0.7-0.9-2.3-1.5-2.9-2.7-2.7-3.3-7.5-5.7-9.9-0.9-0.9-0.1-3.9-1-4.7-3.1-3.1-2.9 1-2.9 1 0.6 0.6 4.8 11.8 3.9 12.7-0.4 0.4-1.5-2.7-1.6-2.9-1.2-1.2-1.5-3.9-2.7-5.1-0.5-0.5-0.1-2.1-0.5-2.9-0.8-1.7 0.3-5.5-0.1-5.9l-5.9-5.9c-0.9-0.9 0.3-2.4-0.6-3.4-0.3-0.3 0.1-4.2 0.1-4.5 0-2.5 7.5-11.8 9.4-13.6 0.4-0.4 0.4-2.2 0.6-2.7 3 0.5 1.6-4.8 0.6-5.9-1.3-3.3 0.8-6.8 0.4-10.3-1-1-0.8-2.7-1.9-3.7-2.7-1.3-5.7-2.1-8.9-2.1-1.2-0.1-2.5-0.1-3.3-0.1-1.6-1.8-3.4-0.2-5 0.9-1.9 1.9-2.7-1.4-3.4-0.7-1.3 1.3-3.6 1.6-4.9 2.9-0.8 0.8-3.4 0.2-4.3 1-0.1 0.1-1.9 1.1-2.1 0.9-0.3-0.3 1.3-1.6 0.6-2.2-0.5-0.5-3.5-1.1-3.5-1.5 0-8.9 8.7-4.5 12.1-7.9 2.1-2.1-1.8-1.3-2.7-0.4 0 0-3.4-1.6-2.3-2.7 2-2 7.2 0.5 7.8-0.1 1.5-1.5-1-2.9-0.2-3.6 2.1-2.1 13.6-1.8 15.5-3.7 0 0 10.7-0.4 12.1-1.1 0.7-0.3 3.7-0.8 4.4-0.1 1.7 1.7 3.4 3.2 5.3 5 0.1 0.1 2.9 0 3-0.1 2.5-2.5 10.9-2.5 15.3-2.5 4.1 0 6.3 1.4 10.3 1.4 0.7 0 1.6-0.5 2.1 0 0.2 0.2-1.1 0.8-1 0.9 0.8 0.8 3.1-0.1 3.9 0.6 0.7 0.7 2.5 0.4 3.3 1.1 0.1 0.1 1.1 1.7 1.5 1.3 0.7-0.7 2-2.2 2.4-2.9 2 0.7 4.5 0 6.3 0 1.9 0 7.9 2.1 8 2 0.8-0.8 1.8-1.3 2.6-2.1 1.4-1.4 1.8-3.9 3.1-5.2 0.3-0.3 2.2-0.5 2.6-0.2 1 0.5-0.7 1.5 0.1 2.4 0.6 0.6 2.5 4.1 2.9 4.1 1.7 0 6.5-3.6 7.8-2.4 1.7 1.7-6.8 4.2-7 4.4-0.5 0.5-4.3 2.4-4.5 1.9-1.7-3.4-2.7 2.2-3.6 3.1-0.5 0.5-2.2-0.2-2.7 0.3-2.3 2.3-17.8 5-11.4 11.4 1.7 1.7 4.6 2.9 8 2.9 0.5 0 3.1 0.6 3.1 0.9 0 0.6-2.2 3.7-1 4.9 0.2 0.2 2.4 2.3 3.4 1.4 1.1-1.1 0.7-3.6 1.8-4.6 1.7-1.7 5.4-1.4 7-3 1.3-1.3-1.5-6 0-7.5 1-1 1.5 0.6 2 0.1 1.4-1.4 2.7-2.9 4-4.3 0.3-0.3 6.6 1 6.6 3.3 0 0.8 0.4-0.1 0.6 0.1 0.9 0.9 0.2 5.5 2.6 3 0.5-0.5 1.5-0.4 1.9-0.7 0.6-0.6 2.1-0.6 2.8-1.2 0.1-0.1 1.5-0.1 1.5 0.3-1.3 7.3 1.8 7.3 2.3 10.1 0 0 1-0.7 1.1-0.7 0.8 0 2.5 1.8 1.9 3.1-0.5 1-1.2 0.5-1.7 1-3.5 3.5-6 3.4-13 3.4-1.5 0-10.7 1.1-8.7 3 1.5 1.5 6.5-0.9 7.9 0.5 0.5 0.5-4 1.9-2.4 3.5 0.8 0.8 8.5-0.7 7.1 0.8-1.7 1.7-5.7 1.4-7.5 3.1-0.5 0.5-3.8 3.8-3.7 2.5 0-2.2 3.7-5.5 3.3-5.3-4 2-12 2.5-12 8.5zM79 18.1c1-1.8 2.7-2.3 3.9-3.5 0.9-0.9 3.2 1.1 3.9 0.4 0.2-0.2 2-0.3 2.1-0.1 1 1 2.2 1.9 3.1 2.9 0.5 0.5 1.7 0.3 2.3 0.9 0.6 0.6 2.6-0.5 2.8-0.6 0.6-0.6 2.1 0.9 2.6 0.4 0.2-0.2 2.6-2.2 3.5-1.2 0.1 0.1-0.2 3.1-0.2 3.6 0 0.2 0.5 0.9 0.3 1.1-0.2 0.2-7.5 1.9-7.6 1.8-0.2-0.2-2.6-1.4-3.1-0.9-1 1-4.5 1.4-6.5 0.4-0.1-0.1-1.6-4-0.1-4l-3.4 0c-1.1 0-1.9-0.6-3.4-1zM126.4 16c-3 1.4-3.5 3-1.2 5.3 1-0.6 2.4-1.1 3.5-1.4 1.6-1.6 7 1.6 7.5 2.1 0.7 0.7 0.4 2.3 1.1 3 3.7 3.7-7.6 4.3-4 7.9 0.7 0.7 8.3 3 8.9 2.4 1.2-1.2-2.2-2.9-1-4.1 0.3-0.3 3.8 0.5 3.8 0.9 0.1-1.7-1.4-3.4-1.7-4.9 0.8-0.8 2.7 1.6 3.1 1.1 0.8-3.3-0.5-4.8-3.1-7.2 0.9-0.8 1.2-1.2 0.4-2.5-1-1-6.9-0.9-8.6-2.6-1.2-1.2-5.9 2.1-8.5 0.1z" class="s0"/><path d="m135.1 11c-1.3 0.1-7.2-1.7-5.6-3.2 3.6-3.6 12.1-1.8 13-2.7 3.2-3.2 11.9-5.2 16.5-2.9 2.3 1.2 7.5-0.3 10 1 1.3 0.6 13.7-1.2 13.9-1.4 0.2-0.2 3.6 1.1 3.9 1.4 6.3 1.1 13.6 1.1 20.1 0.6 0.5-0.5 4.1-1.4 5.3-1.1 0.8 0.2 3.3 0.8 3.8 1.3 0.1 0.1 1.2 1.8 0.9 2.1-0.8 0.8-3.6 1.8-4.5 2.6-1 1 0.1 2.3-1.1 3.5-1.4 1.4-6.2 1.3-7.6 2.8-1.4 1.4 0.3 5.2-1.1 6.6-2 2.3-5.4 0.6-7.5 1.5-4.3 2.2-6.3 0.3-9.7 3.8-0.5 0.5-2.9 0.4-3.4 0.9-1.6 1.6-4.8 1.8-6.2 3.3-2.6 2.9-5.5 8.1-6.9 6.9-1.3-1.3-3-2.4-4.2-3.6-2.1-1.5-1-5.2-2.1-6.5-0.1-0.1-1.3-2.2-0.6-2.9 0.8-0.8 3.4 1.1 4.5 0 3.8-3.5 1.3-4.3 0.3-8.5-2.1-6.2-10.5-5.4-11.9-6.6-2.2-2.2 13.6-0.4 9.9-2.2-2.1-1-0.2-1.9-0.6-2.4-4.2 1.3-15 2.6-16.9 3.1-0.6 0.6-1.7 0.8-2.2 1.4-0.6 0.6-0.9 1.6-1.5 2.2-0.2 0.2-0.3-0.6-0.6-0.7-0.3-0.1-2.7 0.9-2.7 1 0 1.4-4.3-0.4-4.6-1z" class="s0"/><path d="m285.5 94.7c-3.5-1.8-12.4 1-15.2-1.9-0.3-0.3-3.9-2.7-4-2.6-0.4 0.4 0.3 1.8-0.1 2.1-0.5 0.5-1.1 1-1.6 1.5-0.6 0.6-0.2 2.6-1.7 1-4-1.5-10.4-2.5-13.7-5.5-2.7-2.7 1.4-6.5 0.6-6.5-0.5 0-1.7-1.1-1.1-1.1 0.3 0-1.9 0.7-2 0.8-1 1-3.9 1.1-5.6 1.1-3.6 0-6.1 1.5-9.6 2.6-1.1 0.4-4.5-1.3-5.2-0.5-0.4 0.4-2.2 1.1-3.1 0.6-0.3-0.2-1.5-2.4-2.1-1.7-0.5 0.5-0.5 1.5-1 2-3.6 3.6-7.9 4.8-6.4 9.5-2.8 1-4.7 3.5-6.5 5.4-2 1.1-2.7 3-3.6 4.8-0.3 0.3-3.2 7.9-3 8.1 0.5 0.5 2 4.1 1.1 5-1.5 1.5-0.9 4.8-2.2 6.1-0.7 0.7 0.9 2 1 2.1 0.6 0.6-0.7 2.1-0.2 2.6 1.7 1.7 4.1 2.9 5 4.9 1 2.1 3 5.3 4.9 7.1 1.1 1.1 3.2 1.3 4.3 2.4 1.5 1.5 6.8-0.2 7.4-0.7 0.2-0.2 2.7 0.6 3.3 0 1.3-1.3 6.3-2.4 8.1-2.4 1.9 0 3.9-0.1 5.5 0.8 0 0 1.1 1.8 2.5 3.1 0.6 0.6 1.8-1.1 2.5-0.4 1.5 1.5 4.4 2.6 4.4 5.4 0 1.8-1.7 5-2 6.4 1.2 2.1 2.8 3 4.1 4.4 0.7 0.7 0.3 2.6 1 3.4 1.7 1.7 4.1 6 2.3 8.6 0 0 2.9 4.9-1.8 11-0.2 0.3-0.7 4.4 0 5.1 3 4.1 5.5 11.8 5.1 14.6 0.9 1.8-0.1 3.5 1.3 4.9 1.2 1.2 2.7 3 3.5 4.5 0.3 0.5-0.2 2.2 0.1 2.5 1.5 1.5 1.2 4.6 2.9 6.3 1 1 3.6-0.9 4.4-0.9 4.6-0.6 9.3-2.4 11.6-6.1 4-3.3 5.4-5.8 6.1-7.4 0.8-1.7 2.3-2.7 2.9-3.9 0.8-1.2 2.5-2.3 3.3-2.4-0.1 0 0.3-2.8 0.1-3-0.2-0.2-1.9-4-1.1-4.7 0.9-0.9 1-2.2 1.8-3 2.1-2.1 5.6-3.6 7.8-5.7 0.4-0.4 0.6-2.2 1.1-2.7 2.1-2.1-4.2-17.7-2.5-19.4 3.2-4 6.1-7.7 9.5-11 5.3-5.3 10-11.9 12-20.1-0.6 0.3-14.4 2.4-14.7 2-2-2-1.8-6.2-3.7-8.1-2-2-10.7-13.6-10.7-16.5 0-2.2-2.9-9.6-4.6-11.4-0.4-0.4 0 0-1.6-2.9z" class="s0"/><path d="m316.6 178.7c2.1 4.1 0.5 12.1-2.2 14.9-1 1-0.7 3.2-1.7 4.3-0.8 0.8 0.2 3.4-0.6 4.3-0.7 0.8-3.3 2.1-4.4 2.1-2 0.1-3.6-6.1-2.2-7.7l2.3-2.7c1.2-1.5-1.2-7.1-0.2-7.5 2.3-1 10.2-3.6 9.3-7.5z" class="s0"/><path d="m482.4 176.4c0.8 3.8 4.5 6.1 4.5 10.1 0 0.8 0.5 3.9-0.4 3.9-0.9 0 1.8 1.1 3 2.4 0.8 0.8 0.5 3 1.4 3.9 0.8 0.8 2.2 2.2 3.5 2.5-1 2.3 2 4 0.6 8.1-0.7 2-1.9 5.4-2.7 7.1-1 2-11.5 13.1-13.7 13.1-0.7 0-5.7 3.8-6.5 3-0.1-0.1 0.8-0.7 0.4-1.1-1.4-1.4-7.1 0.2-6.9-1.2 0.8-4.4-1.1-3.9-1.2-6.5-0.1-1.7 1.3-4.7 1.8-4.7 1 0-7.2 5.4-7.2 3.5 0-1.2 0.1-2.6-0.5-3.2-1.4-1.4-9.1-3-11.2-0.9-1.6 1.6-15 3.8-16.6 5.4-1.2 1.2-4.3-0.7-4.5-1.1-0.5-0.9 0.5-1 1-1.5 0.6-0.6 0.8-4.6 0.8-5.6 0-1.4-1.7-6.4-0.5-7.6 0.6-0.6 1.3-3.3 1.3-4.4 0-0.6 0.2-3.6 0.5-3.5 2.1 0.4 2.4-1.8 4.6-2.5 4.1-1.3 8.6-1.7 11.2-4.9 0.8-1.1 0.8-3.2 1.6-4 0 0 1.2 2.4 1.9 1.8 0.6-0.6-0.2-1.2-0.2-1.6 0-0.8 1.6-1 2-1.4 1.1-1.1 1.8-2.5 2.9-3.6 0.2-0.2 1-0.5 1-0.1 0 0.7 5.2 5.7 4.9 2.4-0.2-2.5 7.4-8.2 10.3-5.4 0.5 0.5 2-0.2 2.3 0 1.1 1.1-2.9 4-1.2 5.6 1.6 1.6 3.6 2.4 5.1 3.9 2.6 2.6 8.1-8.2 7.3-11.6zM464 155.5c0.9 0.5 2.7-0.9 3.4-0.2 2 2 0.4 5.8 3.6 5.8 2.1 0 2.8-2 3.6-2.9 0.5-0.5 13.4 4.4 13.9 4.9 0.7 0.7 1.5 1.3 1.8 2.3 0.6 2.3 4.2 2.3 0.8 3.6-0.8 0.3 1.8 1.3 2.4 1.9 0.3 0.3 5.3 4.3 5.1 4.5-4.3 1.6-8.3-3.3-10.9-5.9-0.1-0.1-5.2 3.1-6.1 2.3-1.7-1.4-4.2-2.3-5.4-2.1-0.6-3.3 2-3.4-2.6-6-1.1-0.6-6.5-1.7-6.6-1.9-0.5-0.5-1.2-1.5-1.2-2.4 0-0.5 1.6-0.3 1.3-0.6-0.7-0.7-3.2-1.8-2.9-3.1z" class="s0"/><path d="m275.6 74.9c-1.6-0.4-2.3 0.5-3 1.3-0.6 0.6-1.9-0.9-3.4 0.5-0.4 0.4 1.5 2.3 1.9 2.6 0.8 0.8-1.1 1.5-1.2 1.6-1.2 1.2 0.9 1.9-1.9 1.9-1.6 0-4-6.2-5.1-7.4-0.8-0.8 0.1-2.1-0.7-3-1.8-1.8-4.5-2.3-6.4-4.1-0.3-0.3-3.7-2.8-4.5-2-2.4 2.4 4.4 5.4 5.3 6.3 0.4 0.4 5.8 3.5 4.6 4.8-0.6 0.6-1.4-1.2-1.9-0.7-0.4 0.4 0.3 1.6-0.1 2l-3.5 3.5c-0.7 0.7-2.6-1.1-2.2-1.4 0.5-0.5 1.2 0.5 1.6 0 0.8-0.8 1.8-1.4 2.6-2.2 1.3-1.3-2.7-3.6-3.2-4.1-1.4-1.4-4.3-1.7-5.5-2.9-0.7-0.7-0.9-2-1.6-2.7-0.3-0.3-2.2 0.1-2.4 0 0 0-0.7-1.1-1.1-0.6-0.7 0.7 0.7 2.2 0.1 2.8-1 1-3.3-1.5-4.4-0.5-2.4 1.2-3.8 4.7-6.4 5-1.2 1.2-0.8 4-1.4 4.6-1.6 1.6-4.3 2.1-5.7 3.5-0.2 0.2-0.8-0.5-1.2-0.5-3.4-0.2-6.5 0.1-8-2.7-0.7-0.7 1.2-3.8 1.4-4 0.8-0.8-1.5-3.3-0.4-4.4l1.9-1.9c1.2-0.6 2.9 0.2 4.1 0.6 4.7 1.9 4.6-0.7 6.5-2.7 2-2-4.2-4.7-4.2-5.4 0-0.3 4 0.4 4-0.4 0-0.9-3.5-1.9-2.6-2.7 1.1-1.1 5.4 0.1 6.8-1.2 1-1 2.1-2 3.1-3 0.4-0.4 1.9-0.4 2.5-1 0.5-0.5 0.5-1.3 1-1.7 0.5-0.5 2.1 0 2.6-0.5l2.9-2.9c0.6-0.6 0.9 1 1.4 1 3.4 0 4.8-1.8 7.3 0.6 0.8 0.8 3.5-1 3.8-1.2 1-1 4.2 0.3 5.1-0.6 0.9-0.9 0.8-5.8 2.9-3.7 2.4 2.4 1.1-4.6 1.4-4.6 1.2 0 5.5 2.3 5.5-1 0-0.1 0.1-0.8 0-0.9-1.6-1.6-6.2 1-7.2 0-0.4-1.1-1.2-1.9-1.6-2.1 1.1 0 2.9-4.1 1.6-5.4-1.7-1.7-4.4 2-5.1 2-0.4 0-3.1 4.2-2 5.3 0.3 0.3 1.7 2.3 1.4 2.6-1.6 1.4-3.3 2.5-3.5 4.4-0.9 0.9-2.3 1.1-3 1.8-2 0.4-2.7-1.1-3-2.5-1.9-1.9-3.4-3.7-7-3.7-0.4 0-1.3 1.2-1.4 1.1-0.6-0.6-0.8-5.7-0.1-6.4 0.3-0.3 3.5 0.4 4.8-0.2 0.7-0.4-0.5-1.5 0.1-2.1l3.5-3.5c3.2-3.2 8.8-5.1 11.8-8 0.7-0.7 5.7-0.5 6.5 0.3 0.6 0.6 2.8-0.1 3.4 0.5 0.8 0.8 4.8 0.2 5.9 0.8 2.7 1.4 7.1 0.5 9.1 2.5 1.3 1.3-1.7 4-2.5 3.1-0.5-0.5-3.2-2.4-4.4-1.2-0.9 0.9 0 2.6 0 3.3 0 0.9 3.2 1.8 3.8 2.4 0.4 0.4 3.2-1.6 3.4-1.7 1.7-1.7 11.7-7.4 14.6-6.6 0.8 0.2 2.6 1 3.4 0.3 0.3-0.3 6.1-2.6 6.1-2.6 1 1 7.7 5.6 10.5 2.9 1.7-1.7-1.3-3.4-2.1-4.2-0.5-0.5-0.2-1.7-0.7-2.3-1.3-1.3 3.4-1.7 4-1.1 1.3 1.3 2.3 2.8 3.5 4 1.1 1.1 0.3 4.2 0.9 4.8 0.3 0.3 1.8 0.1 2.4 0.3-1.6 5.9 2.4 18.6-1.6 22.6-1.2 1.2-2.7 2.4-3.7 3.4-6 5.3-7.5 4.5-10.5 7.4-1.1 1.1-1.4 3.9-3.1 4.8-2.3 1.1-4.6 2.9-6.1 4.4-0.4 0.4-7.8 1.8-9.1 3.1-3.3 3.3-0.9 8.8-3.2 11.1-1.1 1.1-4.1 0.3-5.6 0.3-8.7 0-12 0.6-11.5-8.6z" transform="translate(0,7.6293945e-6)" class="s0"/><path d="m330 26.5c3.2 0.8-3.5-8.6-2-8.6 0.5 0 3.9 7.4 5.5 5.9 1.6-1.6-0.8-5.1 0.3-6.1 2-2 10.7-1.7 11.4-2.4 1.8-1.8 4.6-1.7 6.3-3.4 0.6-0.6 12 0 12.4 0.4 0.9 0.9 4.3-0.7 5.1 0.1 0.3 0.3 1.1 0.3 1.4 0.6 1 1-4 2.9-2.5 4.4 0.6 0.6 5.5 0.4 6-0.1 1.3-1.3 5.2 1.5 6 1.5 0.9-0.5 3.9 0.7 4.6 0 2.8-2.8 10.2-0.3 12.9 1 0.5 0.2 9.9 1.3 10.6 1.3 2.5 0 3.1-1 4.4-2.3 0.1-0.1 1.1-2.2 1.4-2 2.8 2.8 8 3.8 13 3.8 2.4 0 6.5-0.8 8.6-0.1 1.2 0.4 2.8 1.1 4.1 1.8 1.2 0.6 4.2-0.5 5.1 0.4 1.2 1.2 5.7-0.8 7 0.5 0.8 0.8 3.2-0.1 4 0.8 0.2 0.2 1.2 0.8 1.4 0.6 0.4-0.4 0.2-4 3.5-2.4 2.2 1.1 11.3 1 12.4 2.1 0.9 0.9 4.7 2.3 5.6 2.3M478.4 26.4c1.6 0.5 1.9-0.6 3.3-0.6 1.5 0 4.1 0.2 4.9 1 0.8 0.8 1.5 1.9 2.4 2.8 0.1 0.1 1.2 0.8 1.1 0.9-0.9 0.9-10.7-2.8-11.4-2.1-1 1-1.6 1.1-2.6 2.1 0 0 1.1 0.5 2.1 1 1.2 0.6 6.3 2.7 5 4-0.5 0.5-2.7-0.8-3.4-0.1-0.4 0.4-0.3 1.1-0.6 1.5-1.4 1.4-2.9 2.1-4.1 3.3-0.2 0.2 0.4-4.4-1.1-2.9-1.2 1.2-4.4 1.3-4.4 3.6 0 2.8 5.1 2.6 5.1 7.8 0 0.9-0.4 7-0.6 7-1.3 0-4.7-3.7-5.9-4.9-0.5-0.5 0-1.9-0.5-2.4-1.1-1.1-2.4-1.5-3.4-2.5-0.6-0.6-0.5-1.7-1.1-2.2-0.7-0.7 4.2-5.7 1-8.9-0.2-0.2-2.9 1.2-3.5 1.9-1.3 1.3-3.3-2.1-4-1.4-1.4 1.4-1.3 4.4-2.7 5.9-1.3 1.3-11.9-2.6-13.2-1.2-1.1 1.1-2.5 1.4-3.9 2.8-0.4 0.4-0.4 1.2-0.7 1.6-0.5 0.5-0.1 1.8-0.1 2.8 0 6.8 8 1.1 11.3 4.4 1.2 1.2 1.8 2.8 3.1 4.1 0.4 0.4 1.3 0.5 1.6 0.9 0.5 0.5-0.2 3.4-0.2 4.1 0 2.8 1 5.5-0.5 7-0.8 0.8-2.1 1.7-2.7 2.4-0.5 0.5-2.7-0.5-3.2 0-0.5 0.5-2.6 7.6-2.2 8 0.7 0.7 1 1.4 1.8 2.1 1.2 1.2 3.9 1.6 5 2.6M450 82.6c-0.9 1.5-3.5 6.2-5.9 3.9-0.4-0.4 0-1.7-0.4-2.1-0.5-0.5-0.2-1.7-0.6-2.1-1-1-2.9-1.1-3.9-2.1-0.8-0.8-0.5-2.5-1.2-3.2-1.6-1.6-3.6 1.7-4.6 0.6-0.7-0.7 0.1-3.7-1.2-3.7-1.5 0-7 7-6.2 7.8 1.3 1.3 8.6-0.4 8.6-0.4 1.1 1.1-3.6 5.1-2 6.6 2.1 2.1 11.2 9.7 6.9 14-0.5 0.5-0.3 2-0.9 2.6-0.6 0.6-1.2 1.8-1.9 2.5-1.7 1.7-6.6 3.1-8.4 4-0.5 0.2-4.2 6.8-4.9 7.5-1.1 1.1 0.3-5.5-1.5-6.4-3.8-1.9-3.5 1.9-5.6 4-1.8 1.8 2.9 4.2 2.9 4.6 0 1 2.2 1.7 2.8 2.3 0.8 0.8 0.5 2.5 1.3 3.3 3.5 3.5-2.5 8.7-5 10-3.6 1.8-7.4-6.3-8.9-7.7-1.7-1.7-2.4 3.5-2.4 5.4 0 0.6-0.2 3.9-0.2 3.9-2.6-2.6-0.3-10.4-1.7-11.9-0.6-0.6-0.7-1.9-1.2-2.5-1.7-1.7-4.5 3.6-4.5-2.6 0-1.6-2.6-2-3.5-2.9-0.8-0.8-0.5-3.1-1.2-3.9-1.8-1.8-3.5-3.4-7-3.4-0.3 0-0.5-0.6-0.9-0.2-2.3 2.3-5.1 4.3-7.5 6.6-0.9 0.9-2.7 0.6-3.5 1.4-0.3 0.3 0.1 1.4-0.2 1.8-0.4 0.4-1.5 0.5-1.5 1.1 0 0.7-2.1 6.2-2.4 6.5 0 0 1.7 6.3 1.1 6.9-0.7 0.7-1.1 1.6-1.7 2.3-0.3 0.3-1.3 0.3-1.6 0.6-2 2-4.4-6.7-5-7.4-1.3-2.8-2.8-10.4-4.4-12-0.5-0.5 1-4.8-0.5-6.4-1.4-1.4-3.1 3-5 1.1-0.6-0.6-1.7-1-2.5-1.7-0.4-0.4-0.2-1.4-0.6-1.7-2-2-3.9-4-6.9-5-2.1-0.7-10.5 0.8-11.6-0.4-2.2-2.2-5.8-3.9-10.1-3.9-2.6 0-8.1-6.4-8.4-6.1-0.4 0.4 1.6 8.9 2.1 9.5 1.2 1.2 2.5 3.1 3.5 4.1 0.3 0.3 0.9-0.4 1-0.5 0.7-0.7 2.1-0.2 3-0.6 1.7-0.8 2.6-4.4 4.3-2.7 0.3 0.3 0.9 1 0.9 1.5 0 1.5 6.2 5.6 5.6 6.1-3 3-5.2 6.8-8.2 9.9-0.6 0.6-1.6 0.8-2.2 1.5-2.2 2.2-8.9 2.7-11.5 5.4-0.4 0.4-1.5 0-1.9 0.4-2 2-4.2-3-4.5-3.6-2.3-4.7-3.6-9.6-7.4-13.4-1.1-1.1-1.2-4.4-2.4-5.6-0.9-0.9-1-2.6-1.7-3.4-0.6-0.6 0.1 1.2 0.6 1.5 0.2 0.1-0.9-1.3-1.7-2.1-0.5-0.5-2.9-2.6-2.9-3.4 0-0.7-2.4 0.8-2.7 0.5-0.3-0.3-2.3-4.1-2.1-4.2 0.4-0.4 1.7 0 2.1-0.4 2.8-2.8 5.5-4.1 3.9-10.5M400.6 144c0.4 0.9 1.9 0.2 2.4 0.8 1.5 1.5 2.4 3 3.9 4.5 1.2 1.2 3.9 1.4 5.1 2.6 1.7 1.7 8.1 11.4 5.5 14-1.3 1.3-3.9-1.4-4.6-2.1-0.8-0.8-12.1-19-12.2-19.7zM437.5 141.4c-1.6 0.6-2.2 3.1-3.4 4.3-0.4 0.4-2.4-0.3-2.7 0.1-1.6 1.6-2.3 4.3-3.9 5.9-0.7 0.7-1.9-0.5-2.6 0.3-1.3 1.3 1.8 6.9 2.3 8.1 0 0 7.1 1.6 9.4-0.2 0.4-0.3-0.2-1.7 0.1-2.1 0.6-0.6 1.7-0.8 2.3-1.4 0.5-0.5-0.1-2 0.1-2.2 0.5-0.5 1.2-0.9 1.8-1.4 0.4-0.4-1.1-3.3-1.2-3.5-0.9-0.9 3.3-3.5-0.1-6.9-0.4-0.4-1.2-1-1.9-0.9z" class="s0"/></svg>

Copyright (c) 2014, Danielo Rodriguez
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

























! HelloThere

{{HelloThere}}